2

nServiceBus (v3.3.0.0) の単体テストからメッセージ ヘッダーを機能させるのに苦労しています。SetIncomingHeader(...) を使用してテストでヘッダーが設定されますが、メッセージ ハンドラーで GetHeader(...) を呼び出すと、次の文字列が取得されます。

ヘッダー取得アクションが定義されていません。ExtensionMethods.GetHeaderAction = ... を使用して指定してください。

ヘッダーは、テスト フレームワークの外でも問題なく機能します。

FullDuplex サンプル アプリは基本的に、私が使用しているコードを示しており、同じ問題を抱えています。GetHeaderAction メソッドの設定方法を知っている人はいますか?

前もって感謝します。

4

2 に答える 2

2

NServiceBus OutgoingHeaders が静的で ThreadStatic ではない理由で言及されているように? 、NSBが明らかに実行されていないときに、プロジェクトの単体テスト時に呼び出される独自のGetHeaderActionを定義できます。

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 に答える