【问题标题】:Testing with in-memory NServiceBus使用内存中的 NServiceBus 进行测试
【发布时间】:2014-09-24 14:47:26
【问题描述】:

我正在尝试在我的解决方案中创建高级测试,并且我想“捕获”发送到总线的消息。

这是我的工作:

  1. nUnit [SetUp] 在 IISExpress 中启动 WebAPI 项目
  2. SetUp 还会创建总线
  3. 向 API 发送 HTTP 请求
  4. 验证我想验证的任何内容

整个测试的 WebAPI 部分运行良好。公共汽车的创建和启动似乎也很棒。它甚至可以找到我的假消息处理程序。问题是处理程序从不接收来自队列的命令,它们只是永远留在 RabbitMQ 队列中。

总线的配置方式如下:

var bus = Configure.With()
                   .DefineEndpointName("Local")
                   .Log4Net()
                   .UseTransport<global::NServiceBus.RabbitMQ>()
                   .UseInMemoryTimeoutPersister()
                   .RijndaelEncryptionService()
                   .UnicastBus();
                   .CreateBus();

在 NServiceBus 启动的日志中,我看到我的假处理程序与命令相关联:

2014-09-24 15:29:59,007 [Runner thread] DEBUG NServiceBus.Unicast.MessageHandlerRegistry 
[(null)] <(null)> - Associated 'Bloo.MyCommand' message with 'Blah.FakeMyCommandHandler' handler

因此,当消息到达正确的 RabbitMQ 队列时,我假设一切都在处理程序点正常工作之前。

我已经尝试在我的 [TearDown] 中放置等待,以便总线的寿命更长一些 - 希望给处理程序时间来接收消息。我还尝试将交互的消费者部分的内存总线分离到一个新线程中,但没有成功。

有其他人尝试过吗?

这只是第一步,我想做的是创建一个假总线来记录发送给它的消息。对 RabbitMQ 的需求只是为了让自己继续前进(我的解决方案的边界是 WebAPI 在前面,总线在后面)。

干杯

【问题讨论】:

  • 你在公交车上调用.Start()吗?

标签: testing rabbitmq nservicebus nservicebus4


【解决方案1】:

你忘记在总线上调用 .Start(),这就是它没有监听消息的原因。

查看这里了解更多信息:http://docs.particular.net/nservicebus/hosting-nservicebus-in-your-own-process-v4.x

另外,考虑使用 NServiceBus.Testing 对您的处理程序和 sagas 进行单元测试:

https://www.nuget.org/packages/NServiceBus.Testing

【讨论】:

    【解决方案2】:

    我猜您的消息只是永远坐在您的队列中,因为您的端点正在侦听“Local.MachineName”队列而不是“Local”

    如果您将 ScaleOut 设置为 SingleBrokerQueue,这应该对问题进行排序。

    Configure.ScaleOut(s => s.UseSingleBrokerQueue());
    
    var bus = Configure.With()
                   .DefineEndpointName("Local")
                   ...
    

    【讨论】:

      【解决方案3】:

      如果您尝试使用实际队列进行完整的集成测试,那么这个答案对您没有帮助。

      如果您正在进行更集中的测试,即测试依赖总线的单个组件,我建议您使用模拟框架(我喜欢 Moq)并模拟 IBus。然后,您可以验证您希望发送到总线的消息确实已发送。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 2019-06-30
        • 1970-01-01
        • 2022-08-18
        相关资源
        最近更新 更多