0

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

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?

ответ

1

Вы можете обойти это, как:

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

Это как ваш тест может выглядеть следующим образом:

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") 

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

1

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

 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 
      })); 
+0

Ваш ответ правильный, а также, он был представлен позже. – Tonven

 Смежные вопросы

  • Нет связанных вопросов^_^