繁体   English   中英

Apache 骆驼 | Spring 测试 | 拦截路线不起作用

[英]Apache Camel | Spring Testing | Intercept Route is not working

我是 apache 骆驼的新手,所以我仍在努力编写骆驼测试用例。

我定义了以下路线

from("direct:routeToTest")
        .id(ROUTE_ID)
        .to(LOOK_UP_ROUTE)
        .choice()
           .when(some-condition)        
             .choice()
                .when(condition)
                .to(CREATE_ROUTE)
               .otherwise().process(exchange -> exchange.getIn().setBody(prepareResponse(""))
             .endChoice()
          .otherwise()
            .log("Some Issue")
            .process(exchange -> unknownError(exchange))
        .endChoice();
  }

在测试时,我试图拦截在我的路由定义并对其设置一些模拟响应。 因此,经过一番搜索,我发现使用adviceWith是实现它的正确方法。

所以我的测试如下。 测试的结果是,它仍然会去 Look_up_route(直接:lookUpRoute,另一个定义的路由)处理传递的数据,但期望代码应该跳过这个并将响应设置为“MockResponse”

@SpringBootTest
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@RunWith(CamelSpringBootRunner.class)
@UseAdviceWith
@MockEndpoints
@DisableJmx(false)
public class RouteTest {

  @Autowired
  private ProducerTemplate producerTemplate;

  @Autowired
  private CamelContext context;

 @Test
  public void testResponseToJSON() throws Exception {
    SomeObject someObject = getObject();
    context.getRouteDefinition(ROUTE_ID).adviceWith(context, new AdviceWithRouteBuilder() {
          @Override
          public void configure() throws Exception {
            interceptSendToEndpoint(LOOK_UP_ROUTE)
                .skipSendToOriginalEndpoint()
                .transform("MockOutput");
        }
    );
    context.start();
    Object object = producerTemplate.requestBody(direct:routeToTest, someObject);
  }

}

我想知道如何skip.to(LOOK_UP_ROUTE) 并将mockResponse 设置为它。

您的 拦截语句乍一看很好。 但是,请查看此答案以获取替代方法。

你必须

  1. 在您的路线中的 LOOK_UP_ROUTE 步骤中添加一个id
  2. 然后,您可以使用adviceWith删除或操作测试中的标记步骤
  3. 将消息正文(和标头)设置为您的测试应有的任何内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM