Camel:异步路由的集成测试

时间:2014-12-10 09:04:33

标签: testing asynchronous apache-camel integration-testing

我有一个使用apache camel的应用程序,它使用强大的驼峰测试支持完全覆盖了单元测试。这些测试涵盖了骆驼路线的每个部分,并且工作正常。

我现在想要编写不会模拟Camel调用的端点的集成测试。例如,我想测试应用程序的一部分,其行为如下:

  1. 在休息端点上接收请求并回复202
  2. 转换消息并将其发布在activemq
  3. 从activemq中读取消息,将其转换并将其推送到休止端点
  4. 测试看起来像这样

    // start activemq, applications, etc...
    WebTarget target = //initialize a JAX RS webtarget
    DTO data = // generate some datas
    Response r = target .path("url").request(MediaType.APPLICATION_JSON).post(Entity.json(data));
    Assert.assertEquals(r.getStatus(), 202);
    // stop activemq, applications, etc...
    

    这部分效果很好。

    现在的问题是:如果端点回复500代码,我会在mongo数据库中记录错误。我希望我的集成测试检查一下。

    我试过了:

    // start activemq, applications, etc...
    WebTarget target = //initialize a JAX RS webtarget
    DTO data = // generate some datas that generate an error
    Response r = target .path("url").request(MediaType.APPLICATION_JSON).post(Entity.json(data));
    Assert.assertEquals(r.getStatus(), 202);
    Thread.sleep(1000);
    assertErrors(1); // check in mongo if error is written
    // stop activemq, applications, etc...
    

    我不喜欢Thread.sleep(1000)

    我的问题是:

    1. 有没有办法知道Camel是否已经完成处理所有消息?
    2. 在这种情况下测试mongo结果是否有意义,因为它已经被路由部分的单元测试覆盖了?
    3. 感谢您的建议。

1 个答案:

答案 0 :(得分:0)

正如mdnghtblue在评论中提到的,NotifyBuilder是正确的答案

http://camel.apache.org/notifybuilder.html

相关问题