2

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

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

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

我知道正确的做法是从处理程序中删除任何处理代码并单独测试,但我仍然想知道是否有办法做到这一点。

有没有人有任何想法?

4

1 回答 1

2

我通过将 Test.Handler 包装在 try 中并捕获 a TargetInvocationException,然后针对InnerException.

try
{
    Test.Handler<TransactionCreatedHandler>()
        .OnMessage(financialTransaction, Guid.NewGuid().ToString());
}
catch (TargetInvocationException ex)
{
    // Asserts against ex.InnerException
    ...
}

这显然会产生对 NSB 实施的更改会破坏这些测试的风险,尽管这是我愿意承担的。

纳入Daniel Marbach的评论:

在版本 5 及更高版本中,行为发生了变化。测试库不再抛出 TargetInvocationException,而是在 handle 方法中发生的实际异常。提个醒——

于 2013-09-16T15:04:41.377 回答