我正在为我的所有Saga处理程序编写简单的单元测试,基本上只是确保消息被捕获/处理。
但是,其中一个Saga Handler调用了ReplyToOriginator,现在它正在抛出异常,因为测试上下文不被识别为有效的Originator。
更具体地说,我的相关代码如下所示:
[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);
}
测试失败,并传递以下异常:
System.Exception:Entity.Originator不能为null。也许发件人是SendOnly端点。
谁能提供一些关于如何解决这个问题的建议?我是否可能以不合适的方式测试Saga Handlers?
Saga.ReplyToOriginator
期望从原始消息中设置发起者。由于这是一个测试,发起者不会自动设置,您必须通过为_process.Data.Originator
指定一些任意值来手动设置它。