Assert.Throws
Gibt die ausgelöste Ausnahme zurück, mit der Sie die Ausnahme bestätigen können.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Wenn also keine Ausnahme ausgelöst wird oder eine Ausnahme des falschen Typs ausgelöst wird, schlägt die erste Assert.Throws
Zusicherung fehl. Wenn jedoch eine Ausnahme des richtigen Typs ausgelöst wird, können Sie jetzt die tatsächliche Ausnahme bestätigen, die Sie in der Variablen gespeichert haben.
Mit diesem Muster können Sie andere Dinge als die Ausnahmemeldung bestätigen, z. B. im Fall von ArgumentException
und Ableitungen, und Sie können behaupten, dass der Parametername korrekt ist:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
Sie können auch die fließende API verwenden, um diese Asserts auszuführen:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
oder alternativ
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
Ein kleiner Tipp beim Aktivieren von Ausnahmemeldungen besteht darin, die Testmethode mit zu dekorieren SetCultureAttribute
, um sicherzustellen, dass die ausgelöste Nachricht die erwartete Kultur verwendet. Dies kommt ins Spiel, wenn Sie Ihre Ausnahmemeldungen als Ressourcen speichern, um die Lokalisierung zu ermöglichen.
Sie können jetzt die
ExpectedException
Attribute verwenden, zquelle
Assert.Throw
Sie genau die Linie anvisieren, an der Sie interessiert sind.quelle
Assert.That(myTestDelegate, Throws.ArgumentException .With.Property(nameof(ArgumentException.Message)).EqualTo("your argument is invalid."));
Exception.Message
. Ich würde immer noch empfehlen, diese Alternative zumindest hinzuzufügen, daWith.Property
sie auch für andere Objekte verwendet werden kann, was in diesem Fall die Stabilität des Codes verbessern würde.Dies ist eine alte, aber relevante Frage mit veralteten Antworten, daher füge ich die aktuelle Lösung hinzu:
Das funktioniert mit
using Microsoft.VisualStudio.TestTools.UnitTesting;
quelle
Um die Antwort von persistent zu erweitern und mehr Funktionen von NUnit bereitzustellen, können Sie Folgendes tun:
Beispiele:
quelle
Es ist lange her, dass dieses Problem angesprochen wurde, aber ich bin kürzlich auf dasselbe gestoßen und schlage diese Funktion für MSTest vor:
Verwendung:
Mehr hier: http://phejndorf.wordpress.com/2011/02/21/assert-that-a-particular-exception-has-occured/
quelle
Da mich die Ausführlichkeit einiger der neuen NUnit-Muster stört, verwende ich so etwas, um Code zu erstellen, der für mich persönlich sauberer ist:
Die Verwendung ist dann:
quelle