2

我正在努力让消息头从我在 nServiceBus (v3.3.0.0) 中的单元测试中工作。使用 SetIncomingHeader(...) 在测试中设置标头,但是当我在消息处理程序中调用 GetHeader(...) 时,我得到了字符串:

没有定义标题获取标题操作,请使用 ExtensionMethods.GetHeaderAction = ...

标头在测试框架之外工作正常。

FullDuplex 示例应用程序基本上显示了我正在使用的代码并且遇到了同样的问题。有谁知道我如何设置 GetHeaderAction 方法?

提前致谢。

4

2 回答 2

2

正如在为什么 NServiceBus OutgoingHeaders 是静态的而不是 ThreadStatic 中提到的那样?,您可以定义自己的 GetHeaderAction,在对项目进行单元测试时调用它,而 NSB 显然没有运行。

ExtensionMethods.GetHeaderAction =
    ((msg, key) => this.Manager.GetHeader(msg, key));
于 2014-01-17T17:21:08.473 回答
0

正如约翰所提到的,这是固定在

此外,请确保您使用的是此处记录的 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 的。对于其他版本,请访问文档。

于 2015-09-03T18:16:24.987 回答