Camel 2.10.3を使用しています。
次のようなルートがあるとします。
from("direct:split")
.routeId("split-ti-analytics-events")
.split().method(JsonArraySplitter.class,"split")
.parallelProcessing()
.log("Received: ${body}")
.to("stub:direct:somewhere");
そして、NotifyBuilder に続いてそれを実行し、スプリッターが本来すべきことを行っていることをアサートするテスト クラス。
@Test(description = "Asserts that when we receive a json event that we properly split the " +
"events if the payload was a json array.")
public void testReceiveTiAnalyticsArrayOfJsonEvents() {
NotifyBuilder notifier = new NotifyBuilder(context)
.wereSentTo("stub:direct:somewhere")
.whenExactlyDone(7)
.create();
producerTemplate.sendBody("direct:split", sampleEventsInArrayJsonString);
assertTrue(notifier.matches(5, TimeUnit.SECONDS));
}
また、sampleEventsInArrayJsonString が次のような json 配列であるとします。
[{},{},{},{},{},{},{}]
そのjson配列には7つのオブジェクト要素があります。
テストはすぐに失敗します。ただし、テストの出力には、"Received: {}" の 7 つのログ メッセージが明確に表示されます。
さて、ここが楽しい部分です... NotifyBuilder で .whenExactlyDone(8) を設定すると、テストに合格します。その8番目のメッセージは一体どこから来ているのでしょうか? このテストは有効であると言いたいだけでなく、少なくともメッセージがその json 配列から分割されていることがわかっているので (NotifyBuilder の内容を確認していないという事実を無視して)、それを 1 日と呼びたいと思いますが、私は属していないルートを介して送信された 8 番目の交換が実際にあることを懸念しています。NotifyBuilder が、7 ではなく、そのルートを介して行われた 8 つの交換を確認する理由は何ですか?