我很难通过nServiceBus(v3.3.0.0)中的单元测试来获取消息头。使用SetIncomingHeader(...)在测试中设置标题,但是当我在消息处理程序中调用GetHeader(...)时,我得到字符串:
未定义标头获取标头操作,请使用spicify ExtensionMethods.GetHeaderAction = ...
标题在测试框架之外工作正常。
FullDuplex示例应用程序基本上显示了我正在使用的代码并遇到同样的问题。有谁知道我如何设置GetHeaderAction方法?
提前致谢。
答案 0 :(得分:2)
如Why NServiceBus OutgoingHeaders is static and not ThreadStatic?中所提到的,您可以定义自己的GetHeaderAction,当NSB显然没有运行时,在单元测试项目时调用它。
ExtensionMethods.GetHeaderAction =
((msg, key) => this.Manager.GetHeader(msg, key));
答案 1 :(得分:0)
如John所述,这已在
中修复另外,请确保您使用的NServiceBus.Testing框架如下所示:
示例:
[TestFixture]
public class Tests
{
[Test]
public void Run()
{
Test.Initialize();
Test.Handler<MyMessageHandler>()
.SetIncomingHeader("Test", "abc")
.ExpectReply<ResponseMessage>(m => Test.Bus.GetMessageHeader(m, "MyHeaderKey") == "myHeaderValue")
.OnMessage<RequestMessage>(m => m.String = "hello");
}
}
class MyMessageHandler : IHandleMessages<RequestMessage>
{
public IBus Bus { get; set; }
public void Handle(RequestMessage message)
{
ResponseMessage responseMessage = new ResponseMessage();
Bus.SetMessageHeader(responseMessage, "MyHeaderKey", "myHeaderValue");
Bus.Reply(responseMessage);
}
}
请注意,这适用于NServiceBus v4 / v5。有关其他版本,请访问文档。