Test mit NICHT erwartete Ausnahme
Möchte ich erstellen, NUnit-test, um sicherzustellen, dass meine Funktion nicht eine exception werfen. Gibt es eine bestimmte Weise, es zu tun, oder sollte ich einfach schreiben
[Test]
public void noExceptionTest() {
testedFunction();
}
und es wird auch gelingen, wenn keine Ausnahme geworfen wird?
- Ist das wirklich alles, was Sie testen wollen? Sie erkennen, dass, wenn testedFunction ist ein no-op, es wird den test bestehen.
- Funktioniert Ihre Methode, haben eine bestimmte Anforderung nicht zu werfen? Oder ist es getan im Geiste mein code funktioniert, weil es nicht zu werfen? Wenn später, Sie migth möchten Sie überprüfen, those two Fragen, warum im Allgemeinen tun Sie das nicht. Sie gewinnen sehr wenig bis gar nichts von solchen Tests.
- Für den Ausnahmefall, genutzt haben, um zu testen, ob der Aufruf von Dispose() ein zweites mal nicht werfen
- warum war es erlaubt zu werfen, beim ersten Aufruf, nicht während der zweiten?
- glaube das hast du falsch verstanden, es nicht werfen nicht beim ersten Aufruf - der test ist zu überprüfen, ob Sie den zweiten Anruf nicht zu einer Ausnahme führen, entweder. "Wenn ein Objekt das Dispose-Methode mehr als einmal aufgerufen wird, muss das Objekt ignorieren alle Aufrufe nach dem ersten. Das Objekt muss nicht eine Ausnahme werfen, wenn seine Dispose-Methode mehrmals aufgerufen. "msdn.microsoft.com/en-us/library/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
ODER einfach nur Methode
Weitere details siehe NUnit Ausnahme Behauptet
Mithilfe von NUnit 3.0 Constraint-Modell Typ Behauptungen würde der code wie folgt Aussehen:
Assert.That(() => SomeMethod(actual), Throws.Nothing);
Diesem Beispiel ist entnommen aus NUnit-wiki.
Nicht das werfen einer Ausnahme wird der normale Verlauf der Aktion. Ihre Prüfung erfolgreich stellen Sie sicher, dass eine Ausnahme nicht geworfen.
Sind Sie richtig. Wenn es eine Ausnahme, dann wird der test fehlschlagen.
Es sei denn, Sie geben
Oder wie @sll sagt, Sie verwenden die spezifische
Behauptung.
Ja, keine Ausnahmen ausgelöst -> test-pass. Wenn es try-catch-block, ohne re-zu werfen, das vergeht auch.
Ich denke, es ist ein problem in Verbindung mit unit-test-Logik.
Wenn Sie erwarten, dass eine bestimmte Ausnahme unter bestimmten Eingänge, deklarieren Sie es als eine erwartete Ausnahme. Wenn Sie nur überprüfen, ob deine Funktion verhält sich richtig und keine Ausnahmen zu erwarten sind, während das richtige Verhalten, Sie einfach schreiben, und wenn es wirft eine Ausnahme, Ihr test ausfällt.
Dein code scheint zu funktionieren, auf der anderen Seite, nur die überprüfung keine Ausnahmen möglicherweise nicht der richtige Weg für unit-Tests. In unit-tests, in der Regel erwarten, dass einige outputs (erwartete Werte), Sie haben einige tatsächlichen Ausgaben (ist-Werte) und Sie behaupten, dass die erwarteten und die tatsächlichen Werte sind die gleichen.