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

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


person Tomas Jansson    schedule 30.10.2013    source источник


Ответы (1)


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

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

person Andreas Öhlund    schedule 01.11.2013
comment
Я думаю, что это была бы очень полезная функция. - person Tomas Jansson; 02.11.2013
comment
@AndreasÖhlund Есть прогресс в этой функции? Из проблемы неясно, как это поможет с сопоставлениями модульного тестирования, или действительно ли это уже доступно или нет. - person Svein Fidjestøl; 03.11.2015