我有编写组件(端点)的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 "*";
}
现在我所有的测试都很好。但仍然不明白为什么会发生这种情况,我用直接替换端点并发送消息直接(不是真实的)
所以,非常抱歉,如果不是好问题,请关闭。
答案 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();
}