我有几个这种模式的单元测试:
[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 个未覆盖的块。