1

我的问题类似于关于 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 测试?

4

2 回答 2

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

这对你有用吗?

于 2015-10-14T15:57:51.127 回答
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
            }));
于 2015-10-14T23:39:16.900 回答