#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
некоторое произвольное значение.