如何使用 NServiceBus 验收测试从 saga 处理程序获取反馈
Posted
技术标签:
【中文标题】如何使用 NServiceBus 验收测试从 saga 处理程序获取反馈【英文标题】:How to get feedback from saga handler using NServiceBus Acceptance Testing 【发布时间】:2017-03-10 15:20:00 【问题描述】:背景
我编写了一个测试,以确保应该启动我的 saga 的命令有效地创建了 saga,并且它的处理程序代码可以被执行:
[Fact]
public async Task Can_Start_Saga_And_Execute_Handler()
var result = await Scenario
.Define<Context>()
.WithEndpoint<Endpoint>(b => b.When(session =>
return session.SendLocal(new SagaStarter());
)
)
.Done(context => context.IsRequested)
.Run(Testing.MaxRunTime);
result.IsRequested.ShouldBeTrue();
上下文在哪里:
class Context : ScenarioContext
public bool IsRequested get; set;
所以
如果我的 saga 定义中有这样的处理程序:
public async Task Handle(SagaStarter message, IMessageHandlerContext context)
await StuffToDo();
我怎样才能确保
IsRequested
属性,定义在Context
,在传奇中设置为 true?
【问题讨论】:
【参考方案1】:我找到了一个解决方案,在测试中添加了一个额外的消息处理程序,如下所示:
public class TestHandler : IHandleMessages<SagaStarter>
private Context _testContext;
public TestHandler(Context testContext)
_testContext = testContext;
public Task Handle(SagaStarter message, IMessageHandlerContext context)
_testContext.IsRequested= true;
return Task.CompletedTask;
Context
参数通过Dependency Injection插入。
【讨论】:
以上是关于如何使用 NServiceBus 验收测试从 saga 处理程序获取反馈的主要内容,如果未能解决你的问题,请参考以下文章