骆驼单元测试击中自定义组件

时间:2012-12-04 10:32:03

标签: java routing apache-camel

我有编写组件(端点)的camel项目。它用于路由(mycomponent:somename)我的单元测试路径在组件完成后开始失败。 (它使用一些与自己的客户端写的http通信)我可以看到错误根据“无法连接到服务器...”,“无法读取属性....”。

因此,看起来端点不会替换为我用于此目的的直接。 我需要的是,路由的真实单元测试,我不需要启动Web服务来运行一些测试,它应该只是路由测试。

示例代码:

public class MyTest extends CamelTestSupport {

@Override
public String isMockEndpoints() {
    return "*";
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            includeRoutes(new MyRoute());
        }
    };
}

@Test
public void testRouteToRd() throws Exception {
    context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

        @Override
        public void configure() throws Exception {
            replaceFromWith("direct:incomponent");   // replacing from
        }
    });

    getMockEndpoint("mock:myconnector:outcomponent").expectedMessageCount(1);
    template.sendBody("direct:incomponent", OK_MESSAGE);  // and sending to direct
    assertMockEndpointsSatisfied();
}
}

为什么我开始用这种配置命中真正的组件(它在组件完成之前运行良好) 有人可以帮忙,谢谢。

我很抱歉,但复制粘贴和“玩”配置帮助了我。替换

@Override
public String isMockEndpoints() {
    return "*";
}

使用:

@Override
public String isMockEndpointsAndSkip() {
    return "*";
}

现在我所有的测试都很好。但仍然不明白为什么会发生这种情况,我用直接替换端点并发送消息直接(不是真实的)

所以,非常抱歉,如果不是好问题,请关闭。

1 个答案:

答案 0 :(得分:0)

在Camel测试中使用adviceWith时,您必须覆盖方法isUseAdviceWith,然后在发送数据之前致电context.start()

示例:

 @Override
public boolean isUseAdviceWith() {
    // tell we are using advice with, which allows us to advice the route
    // before Camel is being started
    return true;
}

@Test
public void testRouteToRd() throws Exception {
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

    @Override
    public void configure() throws Exception {
        replaceFromWith("direct:incomponent");   // replacing from
    }
});

context.start(); // NECESSARY IF USING ADVICEWITH

getMockEndpoint("mock:myconnector:outcomponent").expectedMessageCount(1);
template.sendBody("direct:incomponent", OK_MESSAGE);  // and sending to direct
assertMockEndpointsSatisfied();

}

参考:Camel AdviceWith documentation