Java 模拟或封装骆驼路线的一部分

Java 模拟或封装骆驼路线的一部分,java,unit-testing,apache-camel,Java,Unit Testing,Apache Camel,有没有办法模仿骆驼路线的一部分 我建立了这样一条路线: from("a").b().signReq().send().validateAns().c().to("d"); 但当我运行测试时,我不想将signReq.send.validateAns添加到路由中。有什么建议吗 另外,也许有一种方法可以将路由的这一部分封装到方法中?这将是伟大的,因为我有许多路线和许多相同的互动部分。最好不用运行时选择/when开关,因为我知道配置阶段的所有条件。对于测试现有路由,您可以在测试路由之前使用Advice

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

我建立了这样一条路线:

from("a").b().signReq().send().validateAns().c().to("d");
但当我运行测试时,我不想将signReq.send.validateAns添加到路由中。有什么建议吗


另外,也许有一种方法可以将路由的这一部分封装到方法中?这将是伟大的,因为我有许多路线和许多相同的互动部分。最好不用运行时选择/when开关,因为我知道配置阶段的所有条件。

对于测试现有路由,您可以在测试路由之前使用AdviceWith和advice

我建议使用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();
当然,有更多的方法来实现这一功能。有关所有选项和完整示例,请访问

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

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

我不知道您试图模拟的每个方法的返回类型,但请记住,您可以部分模拟对象。看看这个:谢谢你的建议!但在thas对象中有很多需要模拟的地方,我想模拟和/或封装整个路由的一部分。根据经验法则,如果很难测试,那就是重构的时候了。