如何断言我的代码中抛出完全类型的无异常?
两个
Assert.That(testDelegate, Throws.Nothing); // any type of an exception was not thrown
和
Assert.That(testDelegate, Throws.InstanceOf<ExactException>()); // an exception of needed type was thrown
这里的方法不正确
答案 0 :(得分:0)
这听起来像你想要的
Assert.That(testDelegate, Throws.TypeOf<ExactException>());
InstanceOf
表示&#34;的确切类型或派生类型&#34; - 就像is
的工作方式一样。我们使用TypeOf
表示它必须是确切的类型。它会创建一个ExactTypeConstraint
。
OTOH,如果您想进行否定测试(不抛出ExactException
),那么您就无法使用流畅的语法。您可以直接指定约束表达式,例如......
Assert.That(testDelegate,
new NotConstraint(
new ThrowsConstraint(
new ExactTypeConstraint(typeof(ExactException)))));
我不推荐,但它可用。如果我不得不这样做,我会使用Rob的解决方法,但我也会质疑为什么我这样做,并希望找到一种方法来避免出现任何情况例外除了某一个是正常的。
答案 1 :(得分:0)
NUnit没有类似Does.Not.Throw.TypeOf<ExactException>()
之类的约束,并且传递/忽略其他异常。测试一个方法不抛出特定异常是一个相当罕见的用例,但如果抛出任何其他异常则传递。对我而言,它是code smell,但如果你真的想这样做,你可以得到你想要的行为,
[Test]
public void DoesNotThrowSpecificException()
{
try
{
MethodThatShouldntThrowExactException(); // But may throw any other exception
}
catch (Exception ex)
{
Assert.That(ex, Is.Not.TypeOf(typeof(ExactException)));
}
}