我有几个这种模式的单元测试:
[TestMethod ()]
[ExpectedException (typeof (ArgumentNullException))]
public void DoStuffTest_Exception ()
{
var foo = new Foo ();
Foo.DoStuff (null);
}
原来代码覆盖率标记抛出行为半运行状态,所以每次我都会得到一个未覆盖的代码块。
经过一番思考,我想到的最佳解决方案是添加try/catch。由于这是一个重复的模式,我打算创建一个类似以下的帮助方法
public static void ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T) { return; }
Assert.Fail ("Expected " + _T);
}
这将有一个很好的副作用,我可以将所有异常测试添加到非抛出测试中。
这是一个有效的设计吗?还是我漏掉了什么?
编辑:糟糕...似乎上面的ExpectException方法也给我留下了1个未覆盖的块。