我在Java DSL中编写了Camel Route构建,现在我想在eclipse IDE中调试它,我的课程看起来像
try{
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
catch (org.openqa.selenium.UnhandledAlertException e) {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText().trim();
System.out.println("Alert data: "+ alertText);
alert.dismiss();}
我能够看到日志正在打印但有没有办法放置调试点(断点)并调试此Route构建器?
答案 0 :(得分:1)
除了Claus提供的链接中描述的技术之外,我们还使用Hawtio控制台和Camel插件。
使用此插件,您可以:
我知道你要求Eclipse,但我认为今天不可能逐步调试DSL,这就是我们主要使用Tracer启用模式的原因,并且在最后一种情况下,使用Hawtio控制台进行步骤 - 逐步调试。
答案 1 :(得分:0)
另一种技术是使用IDE的JUnit,但是你应该稍微修改你的类以便更好地测试它:
使用端点属性,例如更改
from("cxf:bean:process-manager-ws?dataFormat=POJO")
...
.to(RouterEndPoints.ENDPOINT_USERPROFILE_QUEUE.value()) // the two instances
带
from("{{from.endpoint}}")
...
.to("{{user.profile.endpoint.1}}")
...
.to("{{user.profile.endpoint.2}}")
并使用spring或bluprint文件中的原始值设置属性(取决于您使用的是哪个)。
您可以在测试文件夹(src / test,如果使用maven)中创建一个名为PMRouteBuilderTest并使用扩展CamelTestSupport并具有以下内容的测试:
@EndpointInject(uri = "direct:test")
protected Endpoint inputTest;
@EndpointInject(uri = "mock:userEndpointOne")
protected MockEndpoint destinationOne;
@EndpointInject(uri = "mock:userEndpointTwo")
protected MockEndpoint destinationTwo;
@Test
public void testRoutingSampleToDestOne() throws Exception {
destinationOne.expectedMessageCount(1);
destinationTewo.expectedMessageCount(1);
String body = "Anything that can make your test useful"
sendBody(inputTest.getEndpointUri(), body);
assertMockEndpointsSatisfied();
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new PMRouteBuilder();
}
@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
Properties props = new Properties();
// Set your test properties here, those are examples
props.put("from.endpoint", "direct:test");
props.put("user.profile.endpoint.1", "mock:userEndpointOne");
props.put("user.profile.endpoint.2", "mock:userEndpointTwo");
return props;
}
你必须尽可能地让你的测试使用真正的bean,但有时你不能,你必须使用像Mockito这样的模拟框架来模拟方法调用。 之后,您可以从IDE以调试模式执行测试,并将断点放到您在路径中使用的实际处理器中。
我强烈建议您阅读this article about Camel testing。
为简单起见,我将测试类名称与Test一起作为后缀,但通常它应该被命名为PMRouteBuilderIT
,因为它测试多个类并且应该在Integration Test阶段执行(mvn verify,带有failsafe插件)。