Nsb: Обработчики саги модульного тестирования, которые вызывают ReplyToOriginator

#nservicebus

#nservicebus

Вопрос:

Я пишу простые модульные тесты для всех моих обработчиков Saga, в основном просто проверяя, что сообщения вообще перехватываются / обрабатываются.

Однако один из обработчиков Saga вызывает ReplyToOriginator, и прямо сейчас он выдает исключение, потому что контекст теста не распознается как допустимый создатель.

Более конкретно, мой соответствующий код выглядит следующим образом:

     [TestInitialize]
    public void Initialize()
    {
        _context = new TestableMessageHandlerContext();
        _process = new ActionProcess() { Data = new ActionProcess.ActionSagaData() };
    }

    [TestMethod]
    public async Task ActionProcess_ActionSentHandler_ShouldHandleMessage()
    {
        // Arrange
        var cmd = new ActionSent();

        // Act
        await _process.Handle(cmd, _context);

        // Assert
    }


    public async Task Handle(ActionSent message, IMessageHandlerContext context)
    {
        var actionProcessCompletedReply = new ActionProcessCompleted() 
        await ReplyToOriginator(context, actionProcessCompletedReply);
    }
  

И тест завершается неудачно, при этом передается следующее исключение:

Система.Исключение: объект.Инициатор не может быть нулевым. Возможно, отправитель является конечной точкой SendOnly.

Кто-нибудь может дать несколько советов относительно того, как решить эту проблему? Возможно, я тестирую обработчики Saga неподходящим образом?

Ответ №1:

Saga.ReplyToOriginator ожидается, что отправитель будет установлен на основе исходного поступающего сообщения. Поскольку это тест, инициатор не устанавливается автоматически, и вам придется устанавливать его вручную, присваивая _process.Data.Originator некоторое произвольное значение.