2

ソリューションで高レベルのテストを作成しようとしていますが、バスに送信されたメッセージを「キャッチ」したいと考えています。

これが私がすることです:

  1. nUnit [SetUp] は、IISExpress で WebAPI プロジェクトをスピンアップします
  2. SetUp はバスも作成します。
  3. HTTP リクエストを API に送信する
  4. 確認したいことは何でも確認する

テスト全体の WebAPI 部分は正常に動作します。バスの作成とキックオフも素晴らしいようです。偽のメッセージ ハンドラも検出されます。問題は、ハンドラーがキューからコマンドを受信せず、RabbitMQ キューに永久に留まることです。

バスの構成方法は次のとおりです。

var bus = Configure.With()
                   .DefineEndpointName("Local")
                   .Log4Net()
                   .UseTransport<global::NServiceBus.RabbitMQ>()
                   .UseInMemoryTimeoutPersister()
                   .RijndaelEncryptionService()
                   .UnicastBus();
                   .CreateBus();

NServiceBus の起動時のログを見ると、偽のハンドラーがコマンドに関連付けられていることがわかります。

2014-09-24 15:29:59,007 [Runner thread] DEBUG NServiceBus.Unicast.MessageHandlerRegistry 
[(null)] <(null)> - Associated 'Bloo.MyCommand' message with 'Blah.FakeMyCommandHandler' handler

したがって、メッセージが正しい RabbitMQ キューに到達するのを見て、ハンドラー ポイントが正常に機能するまではすべてが正常であると想定しています。

[TearDown] に待機を入れてみたので、バスがもう少し長生きします - ハンドラーがメッセージを受信する時間を与えることを望んでいます。また、interactoin の消費者部分のメモリ内バスを新しいスレッドにスピンオフしようとしましたが、うまくいきませんでした。

他の誰かがこれを試しましたか?

これは最初のステップにすぎません。私がやりたいことは、送信されるメッセージを記録する偽のバスを作成することです。RabbitMQ の必要性は、自分自身を動かすことだけです (私のソリューションの境界は、前面の WebAPI と背面のバスです)。

乾杯

4

3 に答える 3

2

バスで .Start() を呼び出すのを忘れたので、メッセージをリッスンしませんでした。

詳細については、こちらを参照してください: http://docs.particular.net/nservicebus/hosting-nservicebus-in-your-own-process-v4.x

また、ハンドラーとサガの単体テストに NServiceBus.Testing を使用することを検討してください。

https://www.nuget.org/packages/NServiceBus.Testing

于 2014-09-24T22:41:23.910 に答える
1

エンドポイントが「Local」ではなく「Local.MachineName」キューでリッスンしているため、メッセージはキューに永遠に留まっていると思います

ScaleOut を SingleBrokerQueue に設定すると、問題が解決されます。

Configure.ScaleOut(s => s.UseSingleBrokerQueue());

var bus = Configure.With()
               .DefineEndpointName("Local")
               ...
于 2014-09-25T15:27:37.860 に答える
1

実際のキューを使用して完全な統合テストを実行しようとしている場合、この回答は役に立ちません。

より焦点を絞ったテスト、つまりバスに依存する個々のコンポーネントのテストを行っている場合は、モック フレームワーク (私は Moq が好きです) を使用して IBus をモックすることをお勧めします。次に、バスに送信されると予想したメッセージが実際に送信されたことを確認できます。

于 2014-09-24T15:39:33.923 に答える