Как мне проверить, что мой ConfigureHowToFindSaga работает в NServiceBus?

Сегодня я понял трудным путем, что в саговом тестировании не используются ConfigureHowToFindSaga, Это приводит к появлению исключения "Saga not found", поскольку мой тест не охватывает отображение, что, я думаю, должно. Я создал очень простой пример саги, иллюстрирующий проблему:

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 метод. Почему-то при тестировании саг это не учитывается. Это может привести к тому, что в саге будут присутствовать обработчики, которые не будут выполняться из-за отсутствующего отображения.

Как проверить этот сценарий?

1 ответ

Решение

На данный момент нет поддержки отображений модульного тестирования. Строгий режим, упомянутый здесь, будет поддерживать этот тип тестирования.

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

Другие вопросы по тегам