Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Apache Camel中测试多个RouteBuilder_Java_Unit Testing_Apache Camel - Fatal编程技术网

Java 如何在Apache Camel中测试多个RouteBuilder

Java 如何在Apache Camel中测试多个RouteBuilder,java,unit-testing,apache-camel,Java,Unit Testing,Apache Camel,我想在单个单元测试中测试多个camel-RouteBuilder 我所拥有的: 更改状态的自定义camel处理器 public class MyProcessor implements Processor { MyState state; public MyProcessor(MyState state) {this.state = state;} @Override public void process(Exchange exchange) throws Excep

我想在单个单元测试中测试多个camel-RouteBuilder 我所拥有的:

更改状态的自定义camel处理器

public class MyProcessor implements Processor {
   MyState state;
   public MyProcessor(MyState state) {this.state = state;}

   @Override
   public void process(Exchange exchange) throws Exception {
   state.setState(state.getState() + 5);
   }}
两个简单的RouteBuilder:第一个将消息从“direct:start”路由到“direct:endroute1”,第二个从“direct:endroute1”拾取消息,并将消息路由到某个地方“mock:endroute2”

为单个管线生成器编写单元测试非常简单:

public class MyTest extends CamelTestSupport {
    MyState state = new MyStateImpl();

    @EndpointInject(uri = "mock:result")
    protected MockEndpoint resultEndpoint;

    @Test
    public void testSingleRoute() throws Exception {
        resultEndpoint.expectedMessageCount(1);
        template.sendBody("direct:start", new Object());
        assertTrue(state.getState() == 5);
        resultEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
     return new MyRouteBuilder1(state) {
            public void configure() throws Exception{
               super.configure();
               from("direct:endroute1").to("mock:result");
           }
     };
 }
}

我真正想做的是以某种方式覆盖
CamelTestSupport.createRouteBuilder
,它将测试从
direct:start
mock:endroute2
的整个消息处理链。因此,
state.getState()
应该是10

您可以使用
context.addRoutes(RouteBuilder)
API将多个RouteBuilder添加到上下文中

有关示例,请参见此单元测试:


您可以使用一个RouteBuilder替换多个其他RouteBuilder的路由。

尝试重写方法:

protected RouteBuilder[] createRouteBuilders() {...}
来自CamelTestSupport。它从2.17版开始提供

protected RouteBuilder[] createRouteBuilders() {...}