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.