Тестирование саги MassTransit с запланированными событиями

Попытка следовать примеру тестирования Saga, использующего DI (https://masstransit-project.com/usage/testing.html#testing-using-dependency-injection)

 var provider = new ServiceCollection()
    .AddMassTransitInMemoryTestHarness(cfg =>
    {
        cfg.AddSagaStateMachine<TStateMachine, TInstance>()
            .InMemoryRepository();
        cfg.AddSagaStateMachineTestHarness<TStateMachine, TInstance>();
    })
    .BuildServiceProvider(true);

...

Однако я не могу получить тесты, работающие с запланированными событиями в Saga. Я следую примеру на https://masstransit-project.com/usage/sagas/automatonymous.html#schedule

У меня получилось работать с RabbitMQ, добавив AddRabbitMqMessageScheduler и UseDelayedExchangeMessageScheduler в мою конфигурацию шины сообщений.

В тестах я получаю следующее исключение:

The payload was not found: MassTransit.MessageSchedulerContext

Я думаю, это потому, что я не настроил провайдера правильно. Я пытаюсь найти правильные методы расширения, но я думаю, что это может не поддерживаться в сочетании с AddMassTransitInMemoryTestHarness?


person Joel    schedule 12.05.2021    source источник


Ответы (1)


Поддержка есть, нужно только настроить:

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

Это должно быть выполнено перед запуском жгута.

person Chris Patterson    schedule 12.05.2021
comment
Идеальный! Спасибо ???? - person Joel; 13.05.2021