我有一个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()中找到确切的语句,我需要将这些语句复制粘贴到我的方法中,以便每次都绕过调用它。