1

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 つの交換を確認する理由は何ですか?

4

1 に答える 1

1

はい、これは Camel の小さなバグです。チケットをログに記録し、テストで機能する修正を行いました https://issues.apache.org/jira/browse/CAMEL-6255

于 2013-04-09T14:32:34.800 に答える