Ich habe mehrere Unittests dieses Muster:Testabdeckung vs ExpectedException
[TestMethod()]
[ExpectedException (typeof (ArgumentNullException))]
public void DoStuffTest_Exception()
{
var foo = new Foo();
Foo.DoStuff (null);
}
Es stellt sich heraus, dass die Codeabdeckung markes die Wurflinie als Halb laufen, so dass ich nur 1 Block von ungedeckten Code jedes Mal.
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 nach dem Vorbild der
public static void ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T) { return; }
Assert.Fail ("Expected " + _T);
}
eine Hilfsmethode erstellen Dies hätte den schönen Nebeneffekt, dass ich alle Ausnahme-Tests auf die nicht werfen Tests hinzufügen könnte.
Ist das ein gültiger Entwurf, oder habe ich etwas vermisst?
Bearbeiten: Ugs ... scheint wie die obige ExpectException-Methode lässt mich mit 1 unbedeckten Block.
+1. Gutes Zeug. Das hat mich eine Zeitlang geärgert, aber ich habe es nie gelöst. – magnus