c# - 如何测试我的ConfigureHowToFindSaga 是否在NServiceBus 中工作?

标签 c# nservicebus

今天我艰难地意识到,saga 测试不使用 ConfigureHowToFindSaga。这会导致生产中出现“未找到 Saga”异常,因为我的测试未涵盖映射,而我认为应该涵盖映射。我创建了一个非常简单的示例传奇来说明问题:

public class MySpecialSaga : Saga<MySagaData>,
    IAmStartedByMessages<StartMessage>,
    IHandleMessages<NextMessage>
{
    public void Handle(StartMessage message)
    {
        Data.SagaId = message.Id;
        Console.WriteLine("Saga started with id: " + message.Id);
    }

    public void Handle(NextMessage message)
    {
        Console.WriteLine("Handling next message with id: " + message.Id);
        Bus.Send(new StartMessage() {Id = message.Id + 1});
    }
}

public class NextMessage : ICommand
{
    public int Id { get; set; }
}

public class StartMessage : ICommand
{
    public int Id { get; set; }
}

public class MySagaData : IContainSagaData
{
    public Guid Id { get; set; }
    public string Originator { get; set; }
    public string OriginalMessageId { get; set; }
    public int SagaId { get; set; }
}

现在我有以下两个测试:

[TestFixture]
public class MySpecialSagaTests
{
    public MySpecialSagaTests()
    {
        Test.Initialize();
    }

    [Test]
    public void WhenSagaDoesNotExistItShouldNotFindSaga()
    {
        Test.Saga<MySpecialSaga>()
            .ExpectNotSend<StartMessage>(m => m.Id == 2)
            .When(s => s.Handle(new NextMessage() {Id = 1}));
    }

    [Test]
    public void WhenSagaDoesExistItShouldFindSaga()
    {
        Test.Saga<MySpecialSaga>()
            .When(s => s.Handle(new StartMessage(){ Id = 1}))
            .ExpectNotSend<StartMessage>(m => m.Id == 2)
            .When(s => s.Handle(new NextMessage() {Id = 1}));
    }
}

第一个应该失败,或者至少不发送消息,因为它不应该找到传奇。当我添加 ConfigureHowToFindSaga 方法后,第二个测试应该会通过。由于某种原因,在测试传奇时,不考虑这一点。这可能会导致传奇中的处理程序由于缺少映射而不会被执行。

应该如何测试这个场景?

最佳答案

目前不支持单元测试映射。这里提到的严格模式将支持这种类型的测试。

https://github.com/Particular/NServiceBus/issues/654

关于c# - 如何测试我的ConfigureHowToFindSaga 是否在NServiceBus 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19681055/

相关文章:

c# - (VS2017) 运行选择的代码生成器时出错 : 'Sequence contains no elements'

c# - C# .NET 4.0 中的数据绑定(bind)设置时间缓慢

NServiceBus 长时间运行的进程超时

c# - NServiceBus异常处理和消息重试机制

c# - 配置元素集合 LINQ

c# - MySql 获取行数

c# - EF 使用跳过并执行存储过程

architecture - 顺序很重要时丢失消息

c# - 启动端点时升级到 NServiceBus 3.2.2 异常

azure - 配置nservicebus在azure上自动创建servicebus队列和错误队列