我在根据测试需要调整骆驼路线时遇到问题。
我定义了以下路线:
from(source)
.routeId(ROUTE_GENERAL_ID)
.wireTap(inputMetrics)
.to(mappingStep)
.process(enrichingWithInternalData)
.process(enrichingWithExternalData)
我想测试以窃听结束的路线。因此不需要执行“主”路径中的步骤的处理。下面提到的这些:
.to(mappingStep)
.process(enrichingWithInternalData)
.process(enrichingWithExternalData)
如果不需要运行它们,我想删除它们,以免浪费时间执行它们。我能够删除它们,但我只能通过使用adviceWith将它们一一删除来完成。
adviceWith(context, ROUTE_GENERAL_ID, builder -> builder.weaveByToUri("mappingStep").remove())
adviceWith(context, ROUTE_GENERAL_ID, builder -> builder.weaveByToUri("enrichingWithInternalData").remove())
adviceWith(context, ROUTE_GENERAL_ID, builder -> builder.weaveByToUri("enrichingWithExternalData").remove())
但是这个解决方案需要修改测试,当任何步骤将添加/删除到主路径时。另一个想法是手动迭代路线。但我很好奇,camel 中是否已经有一些东西,我可以在这里使用。或者也许您知道更顺利的解决方案。
您可以分割原来的路线,例如这样:
from(source)
.routeId(ROUTE_GENERAL_ID)
.wireTap(inputMetrics)
.to("direct:mappingStep");
from("direct:mappinStep")
.routeId("mappingStep")
.process(enrichingWithInternalData)
.process(enrichingWithExternalData);
现在您可以在测试中跳过到
direct:mappingStep
端点的路由,如下所示。另外不要忘记告诉您的测试,您正在使用 AdviceWith
:
...
@Override
public boolean isUseAdviceWith() {
return true;
}
@Test
public void testRoute() throws Exception {
AdviceWith.adviceWith(context, ROUTE_GENERAL_ID, a ->
a.interceptSendToEndpoint("direct:mappinStep")
.skipSendToOriginalEndpoint()
.to("mock:mockEndpoint"));
...
}