在骆驼中模拟端点响应

时间:2018-10-24 07:17:14

标签: java apache-camel

我有一条骆驼路线,该路线会发送到负载均衡器并处理响应。是否可以在单元测试中以某种方式模拟该响应?我尝试使用速度,但似乎无法在单元测试中使用。

1 个答案:

答案 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:foomock:result

希望它能回答您的查询。