CamelTestSupport测试多条路线

时间:2019-05-07 00:11:50

标签: java junit apache-camel

我有一个RouteBuilder:

public class OpldRouteBuilder {

    @Override
    public void configure() { 
         configureRoute1();

         configureRoute2();

         configureRoute3();
    }

    protected void configureRoute1() {
        from("route1")....to(getRoute1Dest());
    }

    protected void configureRoute1() {
        from("route2")...to("route3");
    }

    protected String getRoute1Dest(){
        return "route2";
    }

    protected void configureRoute1() {
        from("route3")...to("route4");
    }


}

我想为它们编写单元测试。

    public class OpldRouteTest extends CamelTestSupport {
       @EndpointInject(uri = "mock:route2")
       MockEndpoint mock1;

       @Before
       public void setUp() {
           testObj = new OpldRoute() {
               @Override
               public void configure() {
                   configureRoute1();    
               }
               protected getRoute1Dest() {
                   return "mock:route2";
               }       
           };

           super.setup();
       }

       @Override
       public RouteBuilder createRouteBuilder() {
           return testObj;
       }

       @Test
       public testRoute1() {
           template.sendBody("route1")...to("mock:route2);

           //test mock related stuffs.
       }
   }

一切正常。唯一的问题是,如果不在新的测试方法中显式调用super.setUp(),就无法编写其他测试方法:

      @Test
      public void testRoute2() {
          testObj = new OpldRouteBuilder() }
              @Override
              public void configure() {
                  configureRoute2();
              }
          }
          super.setUp();
      }

我试图调试骆驼的源代码,它看起来像在进行一些初始化,例如在代码内部使用反射注入模拟端点。但是我不确定每个绕过super.setUp()的方法中需要包含哪些特定的语句(因为每次调用super.setUp是多余的)。

我尝试包括以下内容:

     @Test
      public void testRoute2() {
          testObj = new OpldRouteBuilder() }
              @Override
              public void configure() {
                  configureRoute2();
              }
          }
          //super.setUp();
          template = this.context.createProducerTemplate();
          template.start();
          this.consumer = this.context.createConsuperTemplate();
          this.consumer.start();
          context.addRoute(testObj);
          context.start();
      }

但是我遇到异常,例如缺少消费者端点等。

请帮助我在super.setUp()中找到确切的语句,我需要将这些语句复制粘贴到我的方法中,以便每次都绕过调用它。

0 个答案:

没有答案