Camel 路线测试 - 删除从所选步骤开始的所有步骤

问题描述 投票:0回答:1

我在根据测试需要调整骆驼路线时遇到问题。

我定义了以下路线:

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 中是否已经有一些东西,我可以在这里使用。或者也许您知道更顺利的解决方案。

apache-camel camel-test
1个回答
0
投票

您可以分割原来的路线,例如这样:

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"));

  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.