NUNIT - Attendmessage differisce l'errore
-
25-09-2019 - |
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?
Soluzione
Sfortunatamente Resharper Test Runner ha un bug/limitazione: non gestisce gli attributi previsti. Hai 2 opzioni:
Usa alcuni altri test runner (ad es. Nunit -gui.exe, spedito con nunit) - ma questo approccio rende il dolore a debug i test
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
.