Java Camel:异步路由的集成测试

Java Camel:异步路由的集成测试,java,asynchronous,testing,apache-camel,integration-testing,Java,Asynchronous,Testing,Apache Camel,Integration Testing,我有一个使用apachecamel的应用程序,它使用强大的camel测试支持全面覆盖了单元测试。这些测试覆盖骆驼路线的各个部分,效果非常好 现在我想编写不模拟Camel调用的端点的集成测试。例如,我想测试应用程序的一部分,其行为如下: 在rest端点上接收请求并回复202 转换消息并将其发布到activemq上 从activemq读取消息,对其进行转换并将其推送到rest端点 测试是这样的 // start activemq, applications, etc... WebTarget tar

我有一个使用apachecamel的应用程序,它使用强大的camel测试支持全面覆盖了单元测试。这些测试覆盖骆驼路线的各个部分,效果非常好

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

  • 在rest端点上接收请求并回复202
  • 转换消息并将其发布到activemq上
  • 从activemq读取消息,对其进行转换并将其推送到rest端点
  • 测试是这样的

    // 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...
    
    我不喜欢
    线程。sleep(1000)

    我的问题是:

  • 有没有办法知道Camel是否已完成所有消息的处理
  • 在这种情况下,测试mongo结果是否有意义,因为它已经被路由部分的单元测试覆盖了

  • 谢谢你的建议。

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


    关于第一项,请考虑使用骆驼牌。我不知道这件事。看起来很完美!