我有一条骆驼路线,该路线会发送到负载均衡器并处理响应。是否可以在单元测试中以某种方式模拟该响应?我尝试使用速度,但似乎无法在单元测试中使用。
答案 0 :(得分:0)
Apache已经满足了此类测试要求。有adviceWith构造可以解决此问题。
直接引用示例,对上述链接进行少量修改:
@Test
public void testAdvised() throws Exception {
context.addRoutes(new RouteBuilder() {
@Override public void configure() throws Exception {
from("direct:start").id("my-route").to("mock:foo");
}
});
context.getRouteDefinition("my-route").adviceWith(context, new RouteBuilder() {
@Override
public void configure() throws Exception {
// intercept sending to mock:foo and do something else
interceptSendToEndpoint("mock:foo")
.skipSendToOriginalEndpoint()
.to("log:foo")
.to("mock:result");
}
});
getMockEndpoint("mock:foo").expectedMessageCount(0);
getMockEndpoint("mock:result").expectedMessageCount(1);
template.sendBody("direct:start", "Hello World");
assertMockEndpointsSatisfied();
}
现在,这里的路线定义为:
from("direct:start").id("my-route").to("mock:foo");
假设我们要在此处模拟to
部分。
这正是为我做的:
context.getRouteDefinition("my-route").adviceWith(context, new RouteBuilder() {
@Override
public void configure() throws Exception {
// intercept sending to mock:foo and do something else
interceptSendToEndpoint("mock:foo")
.skipSendToOriginalEndpoint()
.to("log:foo")
.to("mock:result");
}
});
我们从CamelContext获取要修改的路由定义的引用,并使用adviceWith方法可以定义需要完成的所有操作。像这里一样,我建议不要发送到实际目的地,即mock:foo
,而是发送到另外两条路线log:foo
和mock:result
。
希望它能回答您的查询。