首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MassTransit 4单元测试使用者超时

MassTransit 4单元测试使用者超时
EN

Stack Overflow用户
提问于 2018-01-28 14:09:44
回答 1查看 897关注 0票数 2

我已经在MT3.5.7中成功地将此测试模式用于sagas,但现在在MT4.0中测试消费者时,我使用InMemoryTestHarness测试来自消费者的消息发布时出现超时。

单步执行通过测试调试我可以看到消费者被正确调用并发布其消息。消费者除了接收消息并发布新消息外,什么也不做。

但是等待发布消息的_harness.SubscribeHandler超时。

为了简洁起见,下面的代码删除了我的容器注册和测试数据设置。

代码语言:javascript
复制
[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),但我无法在测试夹具中处理该响应。

这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 00:01:17

在MassTransit 4中,内存中消息结构的行为与RabbitMQ相同。以前,内存中会将每条消息发布到每个端点,而不管是否存在该消息类型的绑定。现在,如果没有绑定,消息就不会被传递。

因此,您需要创建另一个接收端点,而不是使用SubscribeHandler<T>,并使用Handled<T>检查消息是否已发布和接收。

或者,您可以只在使用者测试工具上使用_consumer.Published.Select<T>.Any()来查看它是否发布了事件,而不是检查它是否被使用了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48483689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档