如何在 Apache Camel 中测试多个 RouteBuilder [英] How to test multiple RouteBuilders in Apache Camel
问题描述
我想在一个单元测试中测试多个camel RouteBuilder我有什么:
I want to test multiple camel RouteBuilder in a single unit test what I have:
改变状态的自定义骆驼处理器
Custom camel processor that changes state
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);
}}
两个简单的RouteBuilders:首先将消息从direct:start"路由到direct:endroute1",然后从direct:endroute1"获取消息并路由到mock:endroute2"
Two simple RouteBuilders: first routes messages from "direct:start" to "direct:endroute1" second pick up messages from "direct:endroute1" and routes somewhere "mock:endroute2"
public class MyRouteBuilder1 extends RouteBuilder {
MyState state;
public MyRouteBuilder1(MyState state) {this.state = state;}
@Override
public void configure() throws Exception {
from("direct:start").process(new MyProcessor(state)).to("direct:endroute1");
}}
public class MyRouteBuilder2 extends RouteBuilder {
MyState state;
public MyRouteBuilder2(MyState state) {this.state = state;}
@Override
public void configure() throws Exception {
from("direct:endroute1").process(new MyProcessor(state)).to("mock:endroute2");
}}
为单个路由构建器编写单元测试很简单:
Writing unit test for a single route builder is straightforward:
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
What I really want to do is somehow to override CamelTestSupport.createRouteBuilder
that will test whole chain of message processing from direct:start
to mock:endroute2
. As a result state.getState()
should be 10
推荐答案
您可以使用 context.addRoutes(RouteBuilder)
API
查看这个单元测试的例子:
see this unit test for an example:
这篇关于如何在 Apache Camel 中测试多个 RouteBuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!