有没有办法在单元测试期间覆盖处理器?

时间:2015-11-05 20:51:13

标签: apache-camel

我试图为我的一条骆驼路线编写单元测试。在路由中有一个处理器,我想用存根替换。有没有办法可以做到这一点?我正在考虑使用intercept feature,但我无法确定最佳方式。

示例:

from(start)
    .process(myprocessor)
.to(end)

提前致谢。

3 个答案:

答案 0 :(得分:7)

是的,您可以通过使用Camel Adviced with weaveById功能来实现这一点,该功能用于在测试期间替换节点。

您必须在路线中设置处理器的ID,并使用该ID可以编织您想要的任何内容。以下是示例

@Before
    protected void weaveMockPoints() throws Exception{

        context.getRouteDefinition("Route_ID").adviceWith(context,new AdviceWithRouteBuilder() {            
            @Override
            public void configure() throws Exception {              

                weaveById("myprocessorId").replace().to(someEndpoint);

            }
        });             

        context().start();
    }

唯一的问题是,您必须将此应用于尚未启动的路线。最好随意改变,然后按照上面的例子开始你的camelcontext。

答案 1 :(得分:2)

恕我直言,您需要实施Detour EIP(http://camel.apache.org/detour.html)。

from(start)
    .when().method("controlBean", "isDetour")
       .to("mock:detour")
    .endChoice()
    .otherwise()
       .process(myprocessor)
    .end()
.to(end)

答案 2 :(得分:1)

首先你需要扩展CamelTestSupport:     MyTest类扩展了CamelTestSupport {} 在你的测试方法之后:

context.getRouteDefinitions().get(0).adviceWith (context, new AdviceWithRouteBuilder() {
    @Override
    public void configure() throws Exception {
        weaveById("myprocessorId")
        .replace().to("mock:myprocessor");
    }
}

在你的路线中:

from(start)
.process(myprocessor).id("myprocessorId")
.to(end)

问候