0

イベントを処理するときにリクエストを送信し、応答に応じてアラートを発行するハンドラーがあります。NServiceBus テスト フレームワークを使用してこれをテストしようとしていますが、バスが応答しているふりをする方法がよくわかりません。送信をテストする方法 (Test.Handler(...).ExpectSend... を使用) と、応答を行っている他のハンドラーで応答をテストする方法 (Test.Handler ( ...) を使用) の例を見てきました。 .ExpectReply)、ただし、応答の処理をテストするために応答をスタブ化することについては何もありません。

ハンドラーの Handle メソッドは次のようになります。

public void Handle(SomeEvent @event)
{
   bus.Send<SomeRequest>(request => { request.Stuff = @event.Stuff })
       .Register<SomeReply>(reply => { if (reply.OhNo) bus.Publish(new SomeAlert("augh!")); });
}

これまでのテストの様子は次のとおりです。

Test.Handler(bus => new MyHandler(bus, serviceMock.Object)).
   ExpectSend(verifyRequest).
   // thought maybe something here like .StubReply(someReply) or something?
   ExpectPublish(verifyAlert).
   OnMessage(@event, "xyz");

アドバイスをありがとう!

4

1 に答える 1

0

メッセージ ハンドラーは状態を持たない単一の呼び出しオブジェクトであるため、.Register の呼び出しは期待どおりに機能しません。返信処理ロジックを別のメッセージ ハンドラーに移動することもできます (要求から何かを記憶することに依存する動作がないように見えるため)。または、より複雑なオーケストレーションが必要な場合は、saga を使用することもできます。

ちなみに、saga で .Register を使用することはありません。代わりに、応答用に別の Handle メソッドを使用します。それらには、より完全なテスト API もありますが、この場合、それらを使用するための引数とは考えません。

応答メッセージ タイプの別のハンドラーから始めます。

于 2013-06-12T19:03:50.690 に答える