Внедрение зависимостей для модульного тестирования NServiceBus Saga

Мой вопрос похож на вопрос о DI для обработчика NserviceBus для тестирования (Handler). В качестве решения вы можете использовать внедрение конструктора, используя следующий синтаксис:

Test.Handler<YourMessageHandler>(bus => new YourMessageHandler(dep1, dep2))

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

var saga = Test.Saga<MySaga>()
            .WithExternalDependencies(DependenciesSetUp);
private void DependenciesSetUp(MySaga saga)
    {
        saga.M2IntegrationService = M2IntegrationService.Object;
        saga.ProcessLogService = ProcessLogService.Object;
        saga.Log = Log.Object;
    }

Однако этот подход требует, чтобы мои зависимости были общедоступными. И я хочу попытаться избежать этого.

Есть ли способ использовать внедрение зависимостей конструкции для тестирования Saga?


person Tonven    schedule 10.10.2015    source источник


Ответы (2)


Вы можете обойти это следующим образом:

Имейте сагу, в которой есть конструктор с параметрами (в дополнение к пустому конструктору по умолчанию, который требуется).

Вот как может выглядеть ваш тест:

Test.Initialize();
var injected = new InjectedDependency() {Id = Guid.NewGuid(), SomeText = "Text"};
var testingSaga = new MySaga(injected);
var saga = Test.Saga(testingSaga);
saga.WhenReceivesMessageFrom("enter code here")

Будет ли это работать для вас?

person Sean Farmar    schedule 14.10.2015

Да, это также поддерживается:

        var saga = new MySaga(new MyFirstDep(), new MySecondDep());

        Test.Saga(saga)
            .ExpectSend<ProcessOrder>(m => m.Total == 500)
            .ExpectTimeoutToBeSetIn<SubmitOrder>((state, span) => span == TimeSpan.FromDays(7))
            .When(s => s.Handle(new SubmitOrder
            {
                Total = 500
            }));
person John Simons    schedule 14.10.2015
comment
Ваш ответ тоже правильный, он был отправлен позже. - person Tonven; 15.10.2015