NUnit 2016 Throws.TypeOf

NUnit 2016 Throws.TypeOf

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

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

单元测试会话 window 显示:

WindowTest [0:00.066] Failed: System.ArgumentNullException : can't be null because that's silly

Visual Studio 2015 年使用 ReSharper Ultimate 2016.3 和 NUnit 3.6.1

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

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