gpt4 book ai didi

使用内存中的 NServiceBus 进行测试

转载 作者:行者123 更新时间:2023-11-28 20:04:48 24 4
gpt4 key购买 nike

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

这是我的做法:

  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] 中放置等待时间,以便总线生命周期更长一些 - 希望给处理程序时间来接收消息。我还尝试过将 interactoin 的消费者部分的内存总线分离到一个新线程中,但没有成功。

有没有人试过这个?

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

干杯

最佳答案

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

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

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

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

关于使用内存中的 NServiceBus 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com