【问题标题】:how to test consumers that have filters (Masstransit)如何测试有过滤器的消费者(Masstransit)
【发布时间】:2021-10-11 20:01:54
【问题描述】:

我正在尝试测试配置了过滤器的消费者。我想知道如何为他们进行单元测试。

我已经使用 InMemoryTestHarness 进行测试。

我还想知道是否/如何使用应用程序使用的相同配置进行测试,而不是使用 InMemoryTestHarness 进行新配置。

我的 Masstransit 配置:

    cfg.ReceiveEndpoint("queue", ep =>
       {
          ep.UseConsumeFilter(typeof(MyFilterConsumer<>), provider);
          ep.ConfigureConsumer<MyConsumer>(provider);
       });

我的单元测试配置:

public class ConsumerUnitTests : IDisposable
{
   private readonly ServiceProvider _provider;
   private readonly InMemoryTestHarness _harness;

   public ConsumerUnitTests()
   {
      _provider = new ServiceCollection()
         .AddMassTransitInMemoryTestHarness(cfg =>
         {
            cfg.AddConsumer<AssetEventUpdatedConsumer>();
            cfg.AddConsumerTestHarness<AssetEventUpdatedConsumer>();
         })
         .BuildServiceProvider(true);
      _harness = _provider.GetRequiredService<InMemoryTestHarness>();
      _ = _harness.Start();
   }

通过这些设置,我可以正常测试消费者。我想知道如何使用过滤器进行测试(在 MassTransit 配置中指定)

【问题讨论】:

  • 您能否详细解释一下如何测试配置了过滤器的客户?查询数据库?关于在asp.net core中使用单元测试,可以参考以下教程:Unit test controller logic in ASP.NET CoreUnit Testing With xUnit And Moq In ASP.NET Core
  • 我想我解释得不对。我知道如何进行单元测试。我需要知道的是如何测试具有消息过滤器的消费者(MassTransit)。我用一个例子编辑了这个问题

标签: asp.net-core .net-core masstransit


【解决方案1】:
_harness.OnConfigureInMemoryBus += (cfg) =>
{
    cfg.UseConsumeFilter(typeof(YourFilter<>), _provider.GetService<IConfigurationServiceProvider>());
};

【讨论】:

  • 欢迎来到 Stack Overflow,感谢您提供答案。您能否编辑您的答案以包括对您的代码的解释?这将有助于未来的读者更好地了解正在发生的事情,尤其是那些刚接触该语言并难以理解概念的社区成员。
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多