Camel junit用bean组件测试http组件

时间:2016-05-18 05:22:24

标签: java junit spring-boot apache-camel

我的骆驼语境中有这样的路线: -

Question Answers

我想测试整个路由。每当我发送直接请求时:测试它将调用testProcessor,然后使用testUrl调用http服务,然后调用responseHandler bean元素。我该怎么测试呢?最重要的是在这里存根http服务

2 个答案:

答案 0 :(得分:1)

我在理解您的确切用例方面遇到了一些麻烦,因此我将向您指出可用于测试的camel的AdviceWithRouteBuilder库。我不是基于camel xml的版本100%流畅,所以我将使用Java DSL作为我的样本。以下是您可以用作参考的一些骆驼文档的链接: http://camel.apache.org/advicewith.html

//示例路线

from("direct:myNormalInput").routeId("xxx")
    .to("myBean", "myMethod").id("enrichmentBean")
    .to("http://myawesomeurl").id("HttpCaller")
    .to("myResponseBean", "myMethod").id("responseHandler");

//样本单元测试

public void myTest throws Exception {
    context.getRouteDefinition("xxx").adviceWith(context, new AdviceWithRouteBuilder() {
        //You can replace your normal route's from statement
        replaceFromWith("direct:testEntry");
        //Swap out your enrichmentBean with a replace or remove it if you prefer
        weaveById("enrichmentBean").replace().to("myTestBean", "myTestMethod");
        //mock out your http call with a different url or a fake endpoint
        weaveById("HttpCaller").replace().to("http://myTestUrl");
        //extract your message at any point in processing to do some validation work
        weaveById("responseHandler").after().to("mock:extract");
    }
    context.start();

    template.sendBody("direct:testEntry", "myTestBody");

    MockEndpoint test = getMockEndpoint("mock:extract");
    int messageCount =  test.getReceivedExchanges().size();
    assertEquals(1, messageCount);
}

答案 1 :(得分:0)

您还可以在单​​元测试中动态添加Jetty使用者的路线。这样,您就可以实际测试Web服务行为。我倾向于在编写集成测试时这样做,并且非常有用。否则,正如马修建议的那样,你可以嘲笑它。