(Im Gegensatz zur Antwort von mcottle) Lange Antwort: NEIN ... die meiste Zeit
Wenn Sie sagen, dass Sie von einem Test erwarten, dass er eine bestimmte Ausnahme auslöst, wissen Sie, wann JEDE Zeile in diesem Test diese bestimmte Ausnahme auslöst.
Das ist nicht ganz dasselbe wie zu wissen, dass die getestete Methode die Ausnahme auslöst.
Wenn Ihr Test das Einrichten eines Objekts oder Kontexts umfasst (innerhalb des Tests, nicht innerhalb der Framework-Version von SetUp
), ist es möglicherweise besser, die einzelne Zeile, die Sie tatsächlich testen möchten, mit einem Try / Catch-Befehl, möglicherweise mit einem Helfer, zu umschließen.
Zum Beispiel,
public static class AssertHelper {
public delegate void Thunk();
public static void DoesNotThrow<T>(Thunk thunk, string message = "")
where T: Exception {
try {
thunk.Invoke();
} catch(T) {
Assert.Fail(message);
}
}
}
und dann
[TestMethod]
public void assertHelperInAction() {
// Random setup stuff here that's too annoying to put in my SetUp
// method.
AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
{/* My random method under test */})
}
Wenn dieser Test fehlschlägt, weiß ich, dass meine getestete Methode die Ausnahme ausgelöst hat und nicht irgendetwas im zufälligen Setup-Zeug.
(Sie sollten versuchen, zufällige Setup-Aufgaben zu vermeiden. Manchmal ist es einfacher, Setup-Code im Test zu haben.)