Camel Spring Boot MockEndpoint断言无法按预期工作

时间:2016-01-29 16:37:02

标签: spring-boot apache-camel

我的测试应用程序可以通过 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);
    }

}

2 个答案:

答案 0 :(得分:0)

您正在使用camel-test-spring中的CamelSpringJUnit4ClassRunner进行测试。骆驼弹簧测试适用于常规弹簧,而不是弹簧靴。

改为使用SpringJUnit4ClassRunner测试运行器。

答案 1 :(得分:0)

Camel Spring Boot尚不支持@MockEndpoint。

解决方法:将端点uris移动到属性文件(在路由定义中使用{{}})并使用不同的属性文件,用mock:orginalUri替换原始端点uri。