我想测试处理给定的消息实例会导致处理失败。但是我无法看到这样做的方法,因为处理程序中抛出的任何异常都不会冒泡到测试代码中,并且似乎没有内置任何内容。
理想情况下,我想这样做:
Test.Handler<TransactionCreatedHandler>()
.ExpectFailure()
.OnMessage(financialTransaction, Guid.NewGuid().ToString());
我知道正确的做法是从处理程序中删除任何处理代码并单独测试,但我仍然想知道是否有办法执行此操作。
有没有人有任何想法?
答案 0 :(得分:2)
我通过尝试包装Test.Handler并捕获TargetInvocationException
,然后对InnerException
断言,解决了这种问题。
try
{
Test.Handler<TransactionCreatedHandler>()
.OnMessage(financialTransaction, Guid.NewGuid().ToString());
}
catch (TargetInvocationException ex)
{
// Asserts against ex.InnerException
...
}
这显然会造成NSB实施的变化会破坏这些测试的风险,尽管这是我愿意承担的。
合并来自Daniel Marbach的评论:
在版本5及更高版本中,行为发生了变化。测试库不再抛出TargetInvocationException,而是抛出handle方法中发生的实际异常。只是抬头 -