0

我有一个处理程序,当它处理某个事件时,它会发送一个请求,并且根据回复,它可能会发布一个警报。我正在尝试使用 NServiceBus 测试框架对此进行测试,但不太明白如何假装总线正在回复。我已经看到了如何测试发送(使用 Test.Handler(...).ExpectSend...)以及如何在另一个正在执行回复的处理程序中测试回复的示例(使用 Test.Handler(...) .ExpectReply),但没有任何关于将回复存根以测试回复的处理。

这是我的处理程序的 Handle 方法的样子:

public void Handle(SomeEvent @event)
{
   bus.Send<SomeRequest>(request => { request.Stuff = @event.Stuff })
       .Register<SomeReply>(reply => { if (reply.OhNo) bus.Publish(new SomeAlert("augh!")); });
}

到目前为止,测试是这样的:

Test.Handler(bus => new MyHandler(bus, serviceMock.Object)).
   ExpectSend(verifyRequest).
   // thought maybe something here like .StubReply(someReply) or something?
   ExpectPublish(verifyAlert).
   OnMessage(@event, "xyz");

感谢您的任何建议!

4

1 回答 1

0

消息处理程序是没有状态的单一调用对象,因此对 .Register 的调用不会像您期望的那样工作。您可以将回复处理逻辑移动到单独的消息处理程序(因为它看起来不像您有任何依赖于从请求中记住某些内容的行为),或者如果您需要更多参与的编排,您可以使用 saga。

顺便说一句,您也不会将 .Register 与您的 saga 一起使用 - 相反,您将有一个单独的 Handle 方法用于响应。他们还有一个更完整的测试 API,尽管我不认为在这种情况下使用它们是一个论据。

从响应消息类型的单独处理程序开始。

于 2013-06-12T19:03:50.690 回答