как протестировать потребителей, у которых есть фильтры (Masstransit)

#asp.net-core #.net-core #masstransit

Вопрос:

Я пытаюсь протестировать потребителя, настроенного с помощью фильтра. Я хотел бы знать, как провести для них модульный тест.

Я уже использую память для своих тестов.

Я также хотел бы знать, можно ли/как можно выполнять тесты, используя ту же конфигурацию, которую использует приложение, и не создавать новую конфигурацию, используя InMemoryTestHarness.

Мой Массив настроить:

     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)

Комментарии:

1. Можете ли вы более подробно объяснить, как протестировать клиента, настроенного с помощью фильтра? Запросить базу данных? Об использовании модульного теста в asp.net ядро, вы можете обратиться к следующему учебному пособию: Логика контроллера модульного тестирования в ASP.NET Ядро и Модульное Тестирование С Помощью xUnit И Moq В ASP.NET Ядро .

2. Я думаю, что я неправильно все объяснил. Я знаю, как проводить модульные тесты. Что мне нужно знать, так это как протестировать потребителя (MassTransit), у которого есть фильтр сообщений. Я отредактировал вопрос с помощью примера

Ответ №1:

 _harness.OnConfigureInMemoryBus  = (cfg) =>
{
    cfg.UseConsumeFilter(typeof(YourFilter<>), _provider.GetService<IConfigurationServiceProvider>());
};
 

Комментарии:

1. Добро пожаловать в Stack Overflow, и спасибо вам за ответ. Не могли бы вы, пожалуйста, отредактировать свой ответ, чтобы включить объяснение вашего кода? Это поможет будущим читателям лучше понять, что происходит, и особенно тем членам сообщества, которые новички в языке и изо всех сил пытаются понять концепции.