【问题标题】:Camel : integration tests of asynchronous routesCamel:异步路由的集成测试
【发布时间】:2014-12-10 09:04:33
【问题描述】:

我有一个使用 apache camel 的应用程序,它使用出色的骆驼测试支持全面覆盖了单元测试。这些测试涵盖了骆驼路线的各个部分并且完美运行。

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

  1. 在 REST 端点上接收请求并回复 202
  2. 转换消息并在activemq上发布
  3. 从 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...

我不喜欢Thread.sleep(1000)

我的问题是:

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

感谢您的建议。

【问题讨论】:

  • 对于第一项,请考虑使用 Camel 的NotifyBuilder
  • 我不知道这件事。看起来很完美!

标签: java asynchronous testing apache-camel integration-testing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多