我的测试应用程序可以通过 CamelSpringBootApplicationController 正常启动。但是,当我正在进行集成测试时, MockEndpoint 的断言无法正常工作我的测试代码的快照如下所示。我做错了吗?
Application.java
@SpringBootApplication
public class Application {
....
public static final String DIRECT_BT_INPUT = "direct:btInput";
public static final String DIRECT_BT_OUTPUT = "direct:btOutput";
@Bean
public RouteBuilder RouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from(DIRECT_BT_INPUT).log("${body}").to(DIRECT_BT_OUTPUT);
from(DIRECT_BT_OUTPUT).log("done");
}
};
}
}
BTRouteUnitTest.java
@RunWith(CamelSpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints(Application.DIRECT_BT_OUTPUT)
public class BTRouteIT {
@Autowired
protected CamelContext camelContext;
@EndpointInject(uri = "mock:" + Application.DIRECT_BT_OUTPUT)
protected MockEndpoint mockBtOutput;
@Produce(uri = Application.DIRECT_BT_INPUT)
protected ProducerTemplate producerTemplate;
@Test
public void test() throws InterruptedException {
mockBtOutput.expectedBodiesReceived("Hello");
producerTemplate.sendBody("Hello");
MockEndpoint.assertIsSatisfied(camelContext);
}
}
答案 0 :(得分:0)
您正在使用camel-test-spring中的CamelSpringJUnit4ClassRunner
进行测试。骆驼弹簧测试适用于常规弹簧,而不是弹簧靴。
改为使用SpringJUnit4ClassRunner
测试运行器。
答案 1 :(得分:0)
Camel Spring Boot尚不支持@MockEndpoint。
解决方法:将端点uris移动到属性文件(在路由定义中使用{{}})并使用不同的属性文件,用mock:orginalUri替换原始端点uri。