为什么这段代码会抛出异常而不是通过测试?
public static int ThrowsSomething(string name)
{
if (name == null)
throw new ArgumentNullException(nameof(name), "can't be null because that's silly");
return -1;
}
[Test]
public void WindowTest()
{
Assert.That(ThrowsSomething("dave"), Is.EqualTo(-1));
Assert.That(ThrowsSomething(null), Throws.TypeOf<ArgumentNullException>());
}
“单元测试会话”窗口显示:
WindowTest[0:00.066]失败:System.ArgumentNullException:不能是
因为那很愚蠢所以无效
带Resharper Ultimate 2016.3和Nunit 3.6.1的Visual Studio 2015
最佳答案
测试失败,因为抛出的异常是未知的,并阻止测试从执行到完成。
使用Assert.Throws<>
断言引发的异常
[Test]
public void WindowTest() {
Assert.That(ThrowsSomething("dave"), Is.EqualTo(-1));
Assert.Throws<ArgumentNullException>(() => ThrowsSomething(null));
}
或者使用委托,以便断言可以捕获和处理异常。
Assert.That(() => ThrowsSomething(null), Throws.Exception.TypeOf<ArgumentNullException>());