我使用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个对象元素。
测试将立即失败。但是,测试的输出清楚地显示了7条“收到:{}”的日志消息。
现在,这是有趣的部分......如果我设置了.whenExactlyDone(8),那么NotifyBuilder中的测试就会通过。第8条信息究竟来自哪里?我只想说这个测试是有效的并且称它为一天,因为我知道它至少会从json数组中分离出来的消息(忽略了我没有在NotifyBuilder中验证内容的事实),但我是关注实际上通过不属于的路线发送第8次交换。 NotifyBuilder看到8个通过该路由而不是7个交换的原因是什么?
答案 0 :(得分:1)
是的,这是Camel中的一个小错误。我已经记录了一张票,并在测试中修了一个工作 https://issues.apache.org/jira/browse/CAMEL-6255