如何在 Apache Camel 中测试多个 RouteBuilder [英] How to test multiple RouteBuilders in Apache Camel

查看:26
本文介绍了如何在 Apache Camel 中测试多个 RouteBuilder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在一个单元测试中测试多个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);
   }}

两个简单的RouteBuilder:首先将消息从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:startmock: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:

https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/AddRoutesAtRuntimeTest.java

这篇关于如何在 Apache Camel 中测试多个 RouteBuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆