Camel Spring Boot MockEndpoint 断言未按预期工作

Camel Spring Boot MockEndpoint assertion not working as expected

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

}

您正在 camel-test-spring 中使用 CamelSpringJUnit4ClassRunner 进行测试。 Camel spring 测试用于常规 spring,而不是 spring-boot。

改为使用 SpringJUnit4ClassRunner 测试运行程序。

Camel 尚不支持@MockEndpoint Spring Boot.

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

替换原始端点 uri