nservicebus 3.2 测试预期失败

标签 nservicebus

我想测试处理给定的消息实例是否会导致处理失败。但是,我看不到执行此操作的方法,因为处理程序中引发的任何异常都不会冒泡到测试代码,并且似乎没有为此内置任何内容。

理想情况下我想这样做:

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

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

有人有什么想法吗?

最佳答案

我通过将 Test.Handler 包装在 try 中并捕获 TargetInvocationException,然后针对 InnerException 进行断言来解决此问题。

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

这显然会带来风险,即 NSB 实现的更改将破坏这些测试,尽管我愿意承担这一测试。

合并来自 Daniel Marbach 的评论:

在版本 5 及更高版本中,行为发生了变化。测试库不再抛出TargetInitationException,而是抛出handle 方法中实际发生的异常。请注意 -

关于nservicebus 3.2 测试预期失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634647/

相关文章:

unit-testing - 如何使用 Moq 测试对 NServiceBus IBus.Publish() 的调用?

NServiceBus: "ArgumentNullException"被 NServiceBus 抛出

c# - NServiceBus 延迟消息处理

visual-studio-2010 - NServiceBus 发布/订阅示例 - 无法加载程序集 NServiceBus.Core 或其依赖项

.net - NServiceBus:找不到(消息)的元数据

c# - NServiceBus 异常和订阅者无法读取队列

c# - NServiceBus 传奇数据未创建

error-handling - 当请求处理程序失败时,NServiceBus 6回调客户端永远不会获得回调

nservicebus - appharbor 的最佳 ESB/消息队列