Java 在springboot中测试Camel处理器

Java 在springboot中测试Camel处理器,java,spring,spring-boot,apache-camel,Java,Spring,Spring Boot,Apache Camel,我正在尝试在Spring Boot中测试一个Camel处理器。然而,即使遵循《骆驼行动》和其他SO答案的指导,我也有很多例外 我使用的是Camel 3.0.0-M4 例如,下面是我的测试: @SpringBootTest @BootstrapWith(SpringBootTestContextBootstrapper.class) public class MyProcessorTest extends CamelTestSupport { @Produce ProducerT

我正在尝试在Spring Boot中测试一个Camel处理器。然而,即使遵循《骆驼行动》和其他SO答案的指导,我也有很多例外

我使用的是Camel 3.0.0-M4

例如,下面是我的测试:

@SpringBootTest
@BootstrapWith(SpringBootTestContextBootstrapper.class)
public class MyProcessorTest extends CamelTestSupport {

    @Produce
    ProducerTemplate template;

    @EndpointInject(uri = "mock:out")
    private MockEndpoint resultEndpoint;

    @Before
    public void setUp() throws Exception {
        super.setUp();
    }

    @BeforeClass
    public static void stopCamelStart() {
        SpringCamelContext.setNoStart(true);
    }

    @AfterClass
    public static void enableCamelStart() {
        SpringCamelContext.setNoStart(false);
    }

    @Before
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("seda:test")
                        .process(new MyProcessor())
                        .to("mock:out");
            }
        };
    }

    @Test
    public void testPrepend() throws Exception {
        Map<String, String> body = new HashMap<String, String>();
        body.put("test", "body");

        template.sendBody("seda:test", body);
        String result = resultEndpoint.getExchanges().get(0).getIn().getBody(String.class);

    }
}

@SpringBootTest
@BootstrapWith(SpringBootTestContextBootstrapper.class)
公共类MyProcessorTest扩展了CamelTestSupport{
@产生
产品模板;
@端点注入(uri=“mock:out”)
私有模拟点;
@以前
public void setUp()引发异常{
super.setUp();
}
@课前
公共静态void stopCamelStart(){
SpringCamelContext.setNoStart(true);
}
@下课
publicstaticvoid启用camelstart(){
SpringCamelContext.setNoStart(false);
}
@以前
受保护的RouteBuilder createRouteBuilder()引发异常{
返回新的RouteBuilder(){
@凌驾
public void configure()引发异常{
来自(“seda:测试”)
.process(新的MyProcessor())
。至(“模拟:淘汰”);
}
};
}
@试验
public void testPrepend()引发异常{
Map body=newhashmap();
主体。放置(“测试”、“主体”);
发送主体模板(“seda:测试”,主体);
字符串结果=resultEndpoint.getExchanges().get(0.getIn().getBody(String.class));
}
}
我得到一个
java.lang.ArrayIndexOutOfBoundsException

如果我尝试启动camel上下文
context.start()我得到一个
java.lang.NullPointerException

如果我交换路由,我将主体发送到
template.sendBody(“mock:out”,body)未进行任何处理

如果我从
seda:test
更改为
direct:test
,我会得到一个运行速度非常慢的测试,
org.apache.camel.component.directConsumerNotAvailable异常:端点上没有可用的使用者:direct://test


我哪里出错了???

在第一次查看时,您有两个方法,前面标有
。JUnit根本不保证这两个函数的执行顺序。所以,这可能是在制造麻烦


但是,我认为没有必要设置驼峰路径测试来测试处理器

我强烈建议用POJO替换处理器(它们既笨拙又难以测试),并用
.bean
而不是
.Processor
来调用它

  • 豆子非常容易测试
  • 您可以使用超快速的普通JUnit测试
  • 您可以不通过Camel Exchange进行导航

您是否已经尝试过类似的测试设置?另外还有一个类似于您的设置。是的,我两个都试过了:(我想知道配置中是否有其他东西会影响测试环境我还没有尝试Camel 3,待定。我无法说明使用Camel 2.22+的测试设置是否也适用于Camel 3,Camel 3今天发布了RC2。您可以尝试返回到2.24.2(或类似版本),如果可能的话,查看配置是否与该版本一起工作。可能也有人可以在active上帮助您解决您的issueThanks@RomanVottner这很有帮助:)谢谢,这非常有帮助!您介意将我链接到一个测试处理bean的示例吗?该bean是一个普通Java对象。根本没有框架。您可以使用普通JUnit测试其方法,就像您测试任何其他Java方法一样。有关如何在Camel中使用bean的较长介绍,请参阅此处: