为什么这段代码会抛出异常而不是通过测试?

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>());

10-05 21:46