Domanda

Sono abbastanza nuovo per TDD e vado con Nunit e Moq. Ho un metodo in cui mi aspetto un'eccezione, quindi volevo giocare un po 'con le caratteristiche dei framework.

Il mio codice di test sembra segue:

    [Test]
    [ExpectedException(ExpectedException = typeof(MockException), ExpectedMessage = "Actual differs from expected")]
    public void Write_MessageLogWithCategoryInfoFail()
    {
        string message = "Info Test Message";

        Write_MessageLogWithCategory(message, "Info");

        _LogTest.Verify(writeMessage =>
            writeMessage.Info("This should fail"),
            "Actual differs from expected"
        );
    }

Ma ricevo sempre l'errore di errore che il messaggio di errore che il messaggio di eccezione effettivo differisce dal messaggio previsto. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Sfortunatamente Resharper Test Runner ha un bug/limitazione: non gestisce gli attributi previsti. Hai 2 opzioni:

  1. Usa alcuni altri test runner (ad es. Nunit -gui.exe, spedito con nunit) - ma questo approccio rende il dolore a debug i test

  2. Cattura e convalida manualmente l'eccezione, usando il seguente modello:

    Test] public void write_messagelogwithcategoryInfofail () {try {String Message = "Info Test Message";

      Write_MessageLogWithCategory(message, "Info");
    
      _LogTest.Verify(writeMessage =>
          writeMessage.Info("This should fail"),
          "Actual differs from expected"
      );
      Assert.Fail("Expected exception");
    }
    catch(MockException e)
    {
      Assert.AreEqual("Actual differs from expected", e.Message);
    }
    

    }

È un vero peccato, perché il modo descrittivo di dire che ti aspetti un'eccezione è molto più bello!

In una nota a margine spero che il codice sopra sia solo per giocare con il framework - di solito non catturesti mai mockexcepzioni :)

Altri suggerimenti

È possibile utilizzare il parametro extra MatchType = MessageMatch.Regex.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top