如何使用 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 处理程序获取反馈的主要内容,如果未能解决你的问题,请参考以下文章

插入后nservicebus删除订阅记录?

在干净的架构中,如何进行验收测试?

如何在大型项目中管理用于验收测试的测试数据夹具?

如何使用代码配置nservicebus msmqtransport

如何在 Ember.js 验收测试中调试“找不到模块”?

如何使用Jaeger获得Nservicebus的痕迹?