Testing NServiceBus-Saga单元测试的依赖注入

Testing NServiceBus-Saga单元测试的依赖注入,testing,dependency-injection,nservicebus,nservicebus-sagas,Testing,Dependency Injection,Nservicebus,Nservicebus Sagas,我的问题类似于关于用于测试()的NserviceBus处理程序的DI的问题。 作为解决方案,您可以使用以下语法使用构造函数注入: Test.Handler<YourMessageHandler>(bus => new YourMessageHandler(dep1, dep2)) Test.Handler(总线=>newyourmessagehandler(dep1,dep2)) 我找不到一种方法来使用相同的方法进行Saga测试。 有一个对属性注入的支持,看起来像这样: v

我的问题类似于关于用于测试()的NserviceBus处理程序的DI的问题。 作为解决方案,您可以使用以下语法使用构造函数注入:

Test.Handler<YourMessageHandler>(bus => new YourMessageHandler(dep1, dep2))
Test.Handler(总线=>newyourmessagehandler(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;
    }
var saga=Test.saga()
.具有外部依赖关系(DependenciesSetUp);
私有void DependenciesSetUp(MySaga传奇)
{
saga.M2IntegrationService=M2IntegrationService.Object;
saga.ProcessLogService=ProcessLogService.Object;
saga.Log=Log.Object;
}
但是,这种方法需要将依赖项设置为公共属性。我想尽量避免它


有没有一种方法可以将构造依赖项注入用于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")

这对您有用吗?

是,还支持:

        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
            }));
var saga=new MySaga(new MyFirstDep(),new mysecondep());
测试佐贺(佐贺)
.ExpectSend(m=>m.Total==500)
.ExpectTimeoutToBestin((状态,span)=>span==TimeSpan.FromDays(7))
.When(s=>s.Handle(新提交者
{
总数=500
}));

您的答案也是正确的,稍后提交。