このパターンの単体テストがいくつかあります。
[TestMethod ()]
[ExpectedException (typeof (ArgumentNullException))]
public void DoStuffTest_Exception ()
{
var foo = new Foo ();
Foo.DoStuff (null);
}
コード カバレッジはスロー行をハーフランとしてマークすることが判明したため、毎回 1 ブロックのカバーされていないコードを取得します。
この問題についてしばらく考えた結果、私が思いついた最善の解決策は、try/catch を追加することでした。これは繰り返されるパターンなので、次のようなヘルパー メソッドを作成します。
public static void ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T) { return; }
Assert.Fail ("Expected " + _T);
}
これには、スローしないテストにすべての例外テストを追加できるという副次的なメリットがあります。
これは有効な設計ですか、それとも何か見逃していましたか?
編集: Ugs ...上記のExpectExceptionメソッドのように思えますが、カバーされていないブロックも1つ残されています。