CodeCoverage vs ExpectedException

8

Ich habe mehrere Unittests für dieses Muster:

%Vor%

Es stellt sich heraus, dass Code Coverage die Wurflinie als Half-Run markiert, also bekomme ich jedes Mal einen Block unbedeckten Code.

Nachdem ich eine Weile über dieses Problem nachgedacht hatte, war die beste Lösung, die ich mir vorstellen konnte, ein Versuch / Fang. Da dies ein sich wiederholendes Muster ist, werde ich eine Hilfsmethode nach den Regeln von

erstellen %Vor%

Das hätte den netten Nebeneffekt, dass ich alle Ausnahmetests zu den Tests ohne Werfen hinzufügen könnte.

Ist das ein gültiger Entwurf, oder habe ich etwas vermisst?

Bearbeiten: Ugs ... scheint so zu sein, dass die obige ExpectException-Methode mich auch mit 1 unbedeckten Block belässt.

    
mafu 22.10.2009, 10:51
quelle

4 Antworten

10

Was Sie vorschlagen, ist gültig. Abgesehen von Ihrem Code-Coverage-Problem würde ich sagen, dass es besser ist, als das Attribut ExpectedException zu verwenden, da es explizit anzeigt, welche Zeile des Tests die Ausnahme auslösen soll. Die Verwendung von ExpectedException bedeutet, dass die beliebige Codezeile im Test den erwarteten Ausnahmetyp auslösen kann und der Test trotzdem bestanden wird. Wenn der Fehler von einem anderen Aufruf stammt, von dem nicht erwartet wurde, dass er ausgelöst wird, kann dies die Tatsache verschleiern, dass der Test fehlschlagen sollte, weil die Zeile, die geworfen werden soll, nicht vorhanden ist.

Was wäre eine nützliche Änderung an dem, was Sie vorgeschlagen haben, würde die gefangene Ausnahme zurückgeben:

%Vor%

Dies würde es dem Testcode ermöglichen, die Ausnahme weiter geltend zu machen, wenn es gewünscht wird (dh um zu prüfen, ob eine bestimmte Nachricht verwendet wurde).

NUnit (obwohl es nicht so aussieht, als würden Sie es verwenden, da Sie ein TestMethod -Attribut haben) hat ein eingebautes Konstrukt ähnlich dem, was Sie vorgeschlagen haben:

%Vor%     
adrianbanks 22.10.2009, 11:32
quelle
3

@adrianbanks Die ExpectException funktioniert nicht wie erwartet, wenn der Aktionsparameter eine andere Ausnahme als die erwartete Ausnahme auslöst:

%Vor%

Wenn ich die Testmethode "mein_test" ausführe, habe ich gerade eine Nachricht erhalten, dass die Testmethode ausgelöst wurde und System.ArgumentException: hallo. In diesem Fall sollte "Expected InvalidOperationException" angezeigt werden. Ich schlage eine neue Version für die ExpectException-Methode vor:

%Vor%     
Anben PANGLOSE 17.09.2014 08:14
quelle
2

Ich weiß, das ist ein altes Thema, aber ich stieß auf das gleiche Problem.

Schließlich habe ich mich selbst gefragt: Warum muss ich die Abdeckung der Tests wissen? Ich tue das nicht! - Also lasst uns sie ausschließen, also ist die Berichterstattung sauberer.

In meinem Testprojekt habe ich eine CodeCoverage.runsettings Datei hinzugefügt und das ist der Inhalt:

%Vor%

Nach Auswahl dieser Testeinstellungen Datei ist mein Code Coverage 100%

Auf diese Weise ist es nicht notwendig, das System zur Abdeckung des Test-Code-Codes zu "hacken", nur um 100% zu erreichen: -)

    
321X 08.12.2015 14:12
quelle
0

Ja, das ist ziemlich normal - viele unserer Tests machen das gleiche. Gleichzeitig müssen Sie sich fragen, ob Sie nicht einen zu hohen Wert auf die Codeabdeckung legen, wenn diese Halbzweige so viel Gewicht haben, dass es sich lohnt.

    
Epaga 22.10.2009 11:00
quelle