将 MessageData 与 InMemoryTestHarness 结合使用

Use MessageData with InMemoryTestHarness

我尝试使用 MassTransit 的内存测试工具设置集成测试。由于我的 MyCommandConsumer 通过 MessageData 抽象接收大二进制数据,我需要配置存储库:

var provider = new ServiceCollection()
  .AddMassTransitInMemoryTestHarness(cfg =>
  {
      // this does not work:
      cfg.UsingInMemory((context, conf) => conf.UseMessageData(repository));

      cfg.AddConsumer<MyCommandConsumer>();
      cfg.AddConsumerTestHarness<MyCommandConsumer>();
  })                              
  .BuildServiceProvider(true);

不幸的是,上面的代码不起作用并产生异常:

MassTransit.ConfigurationException: 'SetBusFactory' can be called only once.

如何配置 InMemoryTestHarness 以使用 MessageData 提供程序?

您需要解析测试工具,然后添加配置事件。这应该放在调用 Start 线束之前:

TestHarness = provider.GetRequiredService<InMemoryTestHarness>();
TestHarness.OnConfigureInMemoryBus += configurator =>
{
    configurator.UseMessageData(repository);
};