Assert.Throws
restituisce l'eccezione generata che consente di affermare l'eccezione.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Quindi, se non viene generata un'eccezione, o viene generata un'eccezione di tipo errato, il primo Assert.Throws
asserzione fallirà. Tuttavia, se viene lanciata un'eccezione del tipo corretto, puoi ora far valere l'eccezione effettiva che hai salvato nella variabile.
Utilizzando questo modello è possibile affermare su altre cose oltre al messaggio di eccezione, ad es. nel caso di ArgumentException
e derivati, si può affermare che il nome del parametro è corretto:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
È inoltre possibile utilizzare l'API fluente per fare questi afferma:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
Un piccolo suggerimento quando valere su i messaggi di eccezione sono per decorare il metodo di prova con lo SetCultureAttribute
per assicurarsi che il messaggio generato utilizzi la cultura prevista. Questo entra in gioco se si memorizzano i messaggi di eccezione come risorse per consentire la localizzazione.
fonte
2009-10-22 19:49:19
questo è stato davvero utile per me - volevo un modo per visualizzare l'errore, non ho nemmeno letto se un valore è stato restituito dal metodo Assert.Throws. Grazie – Haroon
+1 Grazie per aver mostrato l'API Fluent, per qualche motivo ho avuto problemi a capire come usarlo solo dai documenti NUnit. – aolszowka