2016-09-19 17 views
0

ユニットテスト時に、このチャネルへのメッセージフロー量の正確性をチェックしたいので、私はSpring Integrationデフォルトチャネルを待ち行列に入れたチャネルにブリッジしようとします。バネ統合ブリッジ直接チャネル待ちチャネル

<int:filter input-channel="prevChannel" output-channel="myChannel"> 
<int:bridge input-channel="myChannel" output-channel="aggregateChannel"> 
// the reason I have above bridge is I want to check the amount of message after filter. 
// I cannot check prevChannel since it is before filtering, and I cannot check aggregateChannel 
// because it has other processing branch 

// in test xml I import above normal workflow xml and added below configuration to 
// redirect message from myChannel to checkMyChannel to checking. 


<int:bridge input-channel="myChannel" 
      output-channel="checkMyChannel"/> 

<int:channel id="checkMyChannel">  
    <int:queue/> 
</int:channel> 

私はユニットテスト にcheckMyChannelをautowiredが、checkMyChannel.getqueuesize()は常に0

は私が間違っていたがSTHされる戻り?

答えて

0

を固定してしまった、私はこの1つは、私の場合のために競合状態がいるのであり、助け

How to test Spring Integration パブリッシュ・サブスクライブチャンネルであることをmyChannelを宣言しなければなりません。 "複数の加入者を持つ通常のチャンネルはラウンドロビンします..."

0

あなたは私たちとテストケースを共有しませんでした。私たちは全体像を持っていません。そこに競争状態があるように見えます。 getqueuesize()というアサーションを開始する前に、誰かがcheckMyChannelからすべてのメッセージをポーリングします。

私たちのテストでは、そのような場合には<poller>を使用しません。手動でPollableChannel.receive(timeout)を使用します。これは

+0

編集されました。感謝してください、 – edi

+0

私は 'gateway.publish()'が分からず、なぜあなたに ''が必要なのかわからないので、あなたのコードは機能しません。 –

+0

うわー! 'aggregateChannel'もあります。したがって、デフォルトのラウンドロビンバランサを持つ 'DirectChannel'のように見える同じ' myChannel'には2つの ''があります。だから、今あなたの設定はより複雑です。あなたがここでどの助けを求めているのか分かりませんが、協力しない人を助けるのは難しいです... –