我已经在MT3.5.7中成功地将此测试模式用于sagas,但现在在MT4.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
}命令使用者(TCommandConsumer)成功地接收到从InputQueueSendEndpoint.Send发送的命令,并发布其响应(ConsumerCompleted),但我无法在测试夹具中处理该响应。
这里我漏掉了什么?
发布于 2018-01-29 00:01:17
在MassTransit 4中,内存中消息结构的行为与RabbitMQ相同。以前,内存中会将每条消息发布到每个端点,而不管是否存在该消息类型的绑定。现在,如果没有绑定,消息就不会被传递。
因此,您需要创建另一个接收端点,而不是使用SubscribeHandler<T>,并使用Handled<T>检查消息是否已发布和接收。
或者,您可以只在使用者测试工具上使用_consumer.Published.Select<T>.Any()来查看它是否发布了事件,而不是检查它是否被使用了。
https://stackoverflow.com/questions/48483689
复制相似问题