nservicebus 3.2测试预期的故障

时间:2013-09-05 11:03:52

标签: nservicebus

我想测试处理给定的消息实例会导致处理失败。但是我无法看到这样做的方法,因为处理程序中抛出的任何异常都不会冒泡到测试代码中,并且似乎没有内置任何内容。

理想情况下,我想这样做:

Test.Handler<TransactionCreatedHandler>()
                    .ExpectFailure()
                    .OnMessage(financialTransaction, Guid.NewGuid().ToString());

我知道正确的做法是从处理程序中删除任何处理代码并单独测试,但我仍然想知道是否有办法执行此操作。

有没有人有任何想法?

1 个答案:

答案 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方法中发生的实际异常。只是抬头 -