Используйте данные сообщений с точностью до памяти

#masstransit

Вопрос:

Я пытаюсь настроить интеграционный тест, используя тестовый жгут в памяти MassTransit. Поскольку мой пользователь Mycommand получает большие двоичные данные через абстракцию 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 для использования поставщика данных сообщений?

Ответ №1:

Вам необходимо разрешить тестовый жгут, а затем добавить событие конфигурации. Это должно быть сделано до вызова Start жгута проводов:

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