【问题标题】:Dependency injection for NServiceBus Saga unit testingNServiceBus Saga 单元测试的依赖注入
【发布时间】:2015-10-10 21:08:47
【问题描述】:

我的问题类似于关于 DI for NserviceBus Handler for testing (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 测试中使用构造依赖注入?

【问题讨论】:

    标签: testing dependency-injection nservicebus nservicebus-sagas


    【解决方案1】:

    你可以像这样解决这个问题:

    有一个 saga,它有一个带参数的构造函数(除了一个默认的空构造函数,这是必需的)。

    这就是您的测试的样子:

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

    这对你有用吗?

    【讨论】:

      【解决方案2】:

      是的,它也受支持:

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

      【讨论】:

      • 你的答案也是正确的,后来提交了。
      猜你喜欢
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多