我正在尝试在我的解决方案中创建一个高级测试,并且我想“捕获”发送到总线的消息。
这就是我所做的:
- nUnit [SetUp] 在 IISExpress 中启动 WebAPI 项目
- SetUp 还会创建总线
- 向 API 发送 HTTP 请求
- 验证我想验证的任何内容
整个测试的 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 和后面的总线)。
干杯