在我的“行为”中,我想捕获一个异常,以便我可以对异常数据进行多次测试。网络上的示例展示了如何在测试(或“It”块)中捕获和比较类型/消息,但不展示如何将异常捕获为“行为”本身。
我目前只是在“act”主体中进行尝试/捕获,并将异常存储在上下文中,以便以后在“It”块中进行测试。在那里,我可以对数据执行许多不同的流利断言。这是最好的方法吗?
在我的“行为”中,我想捕获一个异常,以便我可以对异常数据进行多次测试。网络上的示例展示了如何在测试(或“It”块)中捕获和比较类型/消息,但不展示如何将异常捕获为“行为”本身。
我目前只是在“act”主体中进行尝试/捕获,并将异常存储在上下文中,以便以后在“It”块中进行测试。在那里,我可以对数据执行许多不同的流利断言。这是最好的方法吗?
实际上,确实有更好的方法来做到这一点:
void describe_some_exceptional_behavior()
{
context["when throwing an exception"] = () =>
{
act = () => throw new InvalidOperationException();
it["should raise the exception"] = expect<InvalidOperationException>();
};
}
注意:您将结果expect
直接分配给it
. 这让我第一次绊倒。
有关更多示例,请参阅nspec 规范。
我认为目前没有另一种方法可以实现这一点,除了手动 try catch 块来存储异常并稍后在 it 块中检查它。
如果您愿意使用开源框架,您可以使用Fluent Assertions并执行以下操作:
Action act = () => subject.Foo2("Hello");
act.ShouldThrow() .WithInnerException() .WithInnerMessage("whatever");