提问人:furkang68 提问时间:10/25/2023 最后编辑:Guru Stronfurkang68 更新时间:10/26/2023 访问量:44
如何断言 NUnit 中未抛出特定异常?
How to Assert that a specific Exception is not thrown in NUnit?
问:
我正在使用 NUnit 进行测试,并且有一段代码,其中我使用 JObject.Parse(json)。我想确保此代码不会抛出JsonReaderException。这是我尝试过的断言:
Assert.That(() => { JObject.Parse(json); }, Throws.Nothing);
上面的断言仅确认没有抛出异常,但我想特别断言不会抛出 JsonReaderException。有没有办法在 NUnit 中做到这一点?
我尝试过使用诸如 之类的东西,但似乎都不起作用。我希望找到一个 NUnit 断言,允许我检查是否存在特定异常,但找不到执行此操作的方法。Throws.Not.JsonReaderException
答:
1赞
Zohar Peled
10/25/2023
#1
我不知道有一种内置的直接方法来断言不会抛出特定的异常,但您始终可以在测试方法中使用。
像这样的东西就可以了:try...catch
try
{
JObject.Parse(json);
}
catch(JsonReaderException ex)
{
// This will make the test fail...
throw;
}
catch(Exception ex)
{
// ignore or log or whatever, this is just so that the test will pass.
}
这样,任何未通过测试的异常都将通过测试,但不会。JsonReaderException
JsonReaderException
4赞
Guru Stron
10/25/2023
#2
只需用以下命令否定约束:!
// Fails:
Assert.That(() => { throw new AggregateException();},
!Throws.InstanceOf<AggregateException>());
// Passes:
Assert.That(() => { throw new AggregateException();},
!Throws.InstanceOf<InvalidOperationException>());
Constraint
类具有重载运算符,这在某种程度上等同于创建新的。例如,在这种情况下,以下内容也有效:!
NotConstraint
Assert.That(() => { throw new AggregateException();},
new NotConstraint(Throws.InstanceOf<InvalidOperationException>()));
请注意,运算符的当前实现稍微复杂一些:
public static Constraint operator !(Constraint constraint)
{
var r = (IResolveConstraint)constraint;
return new NotConstraint(r.Resolve());
}
评论