【发布时间】:2014-12-10 09:04:33
【问题描述】:
我有一个使用 apache 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...
我不喜欢Thread.sleep(1000)。
我的问题是:
- 有没有办法知道 Camel 是否处理完所有消息?
- 在这种情况下测试 mongo 结果是否有意义,因为它已经被路由部分的单元测试覆盖了?
感谢您的建议。
【问题讨论】:
-
对于第一项,请考虑使用 Camel 的NotifyBuilder。
-
我不知道这件事。看起来很完美!
标签: java asynchronous testing apache-camel integration-testing