【发布时间】:2009-10-22 10:51:50
【问题描述】:
我有几个这种模式的单元测试:
[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 个未覆盖的块。
【问题讨论】:
标签: c# unit-testing expected-exception