NUnit 2016 Throws.TypeOf

Mat*_*t W 4 c# resharper nunit unit-testing

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

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>());
}
Run Code Online (Sandbox Code Playgroud)

单元测试会话窗口显示:

WindowTest [0:00.066]失败:System.ArgumentNullException:不能为null因为那是愚蠢的

Visual Studio 2015与ReSharper Ultimate 2016.3和NUnit 3.6.1

Nko*_*osi 6

测试失败,因为抛出的异常未被捕获并阻止测试运行完成.

使用Assert.Throws<>断言抛出的异常

[Test]
public void WindowTest() {
    Assert.That(ThrowsSomething("dave"), Is.EqualTo(-1));
    Assert.Throws<ArgumentNullException>(() => ThrowsSomething(null));
}
Run Code Online (Sandbox Code Playgroud)

或使用委托,以便断言可以捕获和处理异常.

Assert.That(() => ThrowsSomething(null), Throws.Exception.TypeOf<ArgumentNullException>());
Run Code Online (Sandbox Code Playgroud)