我正在努力寻找一种用于MassTransit内存总线的API,该API可以使我的测试知道所有消息已被其匹配的使用者消耗。
如果我的总线配置如下:
_bus = Bus.Factory.CreateUsingInMemory(cfg =>
{
cfg.ReceiveEndpoint("server.fax.inbound.received", ep =>
{
InboundFaxReceivedConsumer.UseMessageRetry(ep);
ep.Consumer(() => new InboundFaxReceivedConsumer(
_db.Create(),
new NullLogger<InboundFaxReceivedConsumer>()));
});
});
然后,我希望能够执行以下操作:
_bus.Start();
_controller.Post(xml); // controller post is gonna publish a message
_bus.WaitForInactivity(); // <-- this is what I don't know how to do
_bus.Stop();
答案 0 :(得分:0)
如果要测试消息是否已被实际使用,则应使用InMemoryTestHarness,它具有用于观察者使用方并确保消息已被使用的方法。在测试断言通过(或者说失败)之后,您可以停止测试工具。
单元测试中有一个示例消费者测试: https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit.Tests/Testing/ConsumerTest_Specs.cs
在您的情况下,您将为消费者设置安全带:
var harness = new InMemoryTestHarness();
var consumer = _harness.Consumer<InboundFaxReceivedConsumer>();
然后,一旦调用了控制器Post
方法,您将等待使用者接收并处理消息:
Assert.That(consumer.Consumed.Select<InboundFaxReceived>().Any(), Is.True);