嘲弄或封装骆驼路线的一部分

时间:2014-10-22 03:17:55

标签: java unit-testing apache-camel

有没有办法模仿骆驼路线的一部分?

我建立了这样一条路线:

from("a").b().signReq().send().validateAns().c().to("d");

但是当我运行测试时,我不想在路由中添加 signReq()。send()。validateAns()。有什么建议吗?

另外,也许有办法将这部分路由封装到方法中?它会很棒,因为我有很多路线和许多相同的交互部分。如果可以在没有运行时选择/交换机的情况下完成,那是最好的,因为我知道配置阶段的所有条件。

1 个答案:

答案 0 :(得分:0)

为了测试现有路线,您可以使用AdviceWith并在测试之前建议路线。

我建议使用 weaveById ,这是替换部分路线的最精确方式。

例如,在以下路线中

from("direct:start")
    .to("mock:foo")
    .to("mock:bar").id("bar")
    .to("mock:result");

将“mock:bar”的id设置为“bar”后,您可以在测试中使用

 context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            // weave the node in the route which has id = bar
            // and replace it with the following route path
            weaveById("bar").replace().multicast().to("mock:a").to("mock:b");
        }
    });

在您的示例中,您可以执行以下操作:

from("a").b().to("direct:replace").id("replace").c().to("d");

from("direct:replace").signReq().send().validateAns();

然后使用以下方法建议路线:

 weaveById("replace").remove();

当然,有更多方法可以实现此功能。对于所有选项和完整示例,请转到http://camel.apache.org/advicewith.html

提示:特别注意启动上下文的示例中的代码部分!

// we must manually start when we are done with all the advice with
        context.start();