这是Apache Camel路线:
ZooKeeperRoutePolicy routePolicy = new ZooKeeperRoutePolicy("zookeeper:localhost:2181/fuse-example/routePolicy", 1);
from("file:camelInpit").routeId("systemARoute")
.routePolicy(routePolicy)
.log(LoggingLevel.ERROR, "Starting route")
[...]
我想在测试中删除routePolicy,因为测试环境中没有ZooKeeper,但这并不像看起来那么容易
context.getRouteDefinition("systemARoute").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
replaceFromWith("direct:aaa");
weaveByType(RouteDefinition.class).selectIndex(1).remove();
}
});
weaveById("policy")
并设置ID routePolicy(...).id("policy")
无效。
如何在测试时动态删除RoutePolicies
?
答案 0 :(得分:3)
是不是可以做那样的事情?
from("file:camelInpit").routeId("systemARoute")
.choice()
.when(prodEnvironmentExpression)
.routePolicy(routePolicy)
.endChoice()
.end()
.log(LoggingLevel.ERROR, "Starting route")
答案 1 :(得分:2)
您可以访问原始路由并将其路由策略设置为null
context.getRouteDefinition("systemARoute").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
getOriginalRoute().setRoutePolicies(null);
}
});
但我们应该为此添加流畅的DSL构建器以使其脱颖而出?
答案 2 :(得分:1)
如果将它绑定到上下文,则可以通过使用myPolicy是模拟或不执行任何操作的策略轻松地模拟测试中的策略。
如果你创建一个抽象的MyCamelTestSupport,然后你需要模拟它的所有测试扩展MyCamelTestSupport
,那就更容易了@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry jndi = super.createRegistry();
jndi.bind("myPolicy", myPolicy);
return jndi;
}