【问题标题】:Testing message headers in nServicebus在 nServicebus 中测试消息头
【发布时间】:2013-01-30 14:00:51
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

标签: unit-testing nservicebus


【解决方案1】:

正如Why NServiceBus OutgoingHeaders is static and not ThreadStatic? 中提到的,您可以定义自己的 GetHeaderAction,当 NSB 显然没有运行时,在对项目进行单元测试时调用它。

ExtensionMethods.GetHeaderAction =
    ((msg, key) => this.Manager.GetHeader(msg, key));

【讨论】:

    【解决方案2】:

    正如约翰所说,这在

    中已修复

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多