rob*_*obs 2 c# nunit unit-testing masstransit
我已经在MT 3.5.7中成功将这种测试模式与sagas一起使用,但是现在在MT 4.0中并测试了使用者,我正在使用InMemoryTestHarness来测试来自使用者的消息的发布而超时。
通过测试调试的单步执行,我可以看到使用者被正确调用,并且它发布了消息。消费者除了接收消息并发布新消息外什么也不做。
但是等待_harness.SubscribeHandler发布消息的超时。
为简洁起见,以下代码删除了我的容器注册和设置的测试数据。
[TestFixture]
public class ConsumerTest
{
InMemoryTestHarness _harness;
ConsumerTestHarness<TCommandConsumer> _consumer
ConsumeContext<ConsumerCompleted> _resultHandler;
[OneTimeSetup]
public async Task TaskSetup()
{
IContainer _container;
//...container registrations and test data setup
_harness = new InMemoryTestHarnes();
_consumer = _harness.Consumer<TCommandConsumer>( () => _container.Resolve<TCommandConsumer>() );
await _harness.Start();
await _harness.InputQueueSendEndpoint.Send(new TCommand { Source = testdataSource, Topic = testdataTopic });
_resultHandler = await _harness.SubscribeHandler<ConsumerCompleted>(); //Timeout here
}
Run Code Online (Sandbox Code Playgroud)
命令使用者(TCommandConsumer)成功接收了发送的命令,InputQueueSendEndpoint.Send并发布了响应(ConsumerCompleted),但我无法在测试治具中处理该命令。
我在这里想念什么?
在MassTransit 4中,内存中的消息结构的行为与RabbitMQ相同。以前,内存中会将每个消息发布到每个端点,而不管该消息类型是否有绑定。现在,如果没有绑定,则不会传递邮件。
因此,您需要创建另一个接收端点,而不是使用SubscribeHandler<T>,并使用Handled<T>来检查消息是否已发布和接收。
或者,您可以仅使用_consumer.Published.Select<T>.Any()使用者测试工具上的,查看它是否发布了事件,而不是检查事件是否被使用。