NServiceBus Saga 单元测试的依赖注入
Dependency injection for NServiceBus Saga unit testing
我的问题类似于关于 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;
}
但是,这种方法需要使我的依赖项 public 属性。我想尽量避免它。
有没有办法使用构造依赖注入来进行 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
}));
我的问题类似于关于 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;
}
但是,这种方法需要使我的依赖项 public 属性。我想尽量避免它。
有没有办法使用构造依赖注入来进行 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
}));