Unit testing 在nServicebus中测试消息头

Unit testing 在nServicebus中测试消息头,unit-testing,nservicebus,Unit Testing,Nservicebus,我正在努力从nServiceBus(v3.3.0.0)中的单元测试中获取消息头。在测试中使用SetIncomingHeader(…)设置头,但是当我在消息处理程序中调用GetHeader(…)时,我会得到以下字符串: 未定义标头获取标头操作,请使用指定一个 ExtensionMethods.GetHeaderAction= 头在测试框架之外工作良好 FullDuplex示例应用程序基本上显示了我正在使用的代码,并且遇到了相同的问题。有人知道我是如何设置GetHeaderAction方法的吗 提前

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

未定义标头获取标头操作,请使用指定一个 ExtensionMethods.GetHeaderAction=

头在测试框架之外工作良好

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

提前感谢。

如中所述,您可以定义自己的GetHeaderAction,当NSB显然未运行时,在对项目进行单元测试时调用它

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

正如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);
    }
}
[TestFixture]
公开课考试
{
[测试]
公开募捐
{
Test.Initialize();
Test.Handler()
.SetIncomingHeader(“测试”、“abc”)
.ExpectReply(m=>Test.Bus.GetMessageHeader(m,“MyHeaderKey”)==“myHeaderValue”)
.OnMessage(m=>m.String=“hello”);
}
}
类MyMessageHandler:IHandleMessages
{
公共IBus总线{get;set;}
公共无效句柄(请求消息)
{
ResponseMessage ResponseMessage=新的ResponseMessage();
SetMessageHeader(响应消息,“MyHeaderKey”、“myHeaderValue”);
答复(应答信息);
}
}

请注意,这是针对NServiceBus v4/v5的。对于其他版本,请访问文档。

听起来像是一个bug,您能在中提出问题吗?我已经创建了一个问题,请参阅