Java 在springboot中测试Camel处理器
我正在尝试在Spring Boot中测试一个Camel处理器。然而,即使遵循《骆驼行动》和其他SO答案的指导,我也有很多例外 我使用的是Camel 3.0.0-M4 例如,下面是我的测试: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
@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的较长介绍,请参阅此处: