【发布时间】:2021-07-05 02:01:31
【问题描述】:
您好,我使用测试容器与 docker 进行了集成测试。在容器上我运行 jms。在测试中,我将消息放入队列。
如何在测试中等待以使其填充到 jms 上?
在本地机器上它可以工作,但在 jenkins 上它失败了,所以我必须添加
Thread.sleep(3000);
但这很讨厌。 org.awaitility 似乎错过了用法:
await().atMost(2, TimeUnit.SECONDS).until(() -> return true));
我只需要暂停一下以使 jms 传播(放入 jms 队列)并等待侦听器采取行动,即将消息放入数据库。 然后我必须调用 get rest 端点来查看它是否有效。
使用主题会更容易,因为我会在主题上创建测试监听器。 但它是队列,可以有监听器来获取消息。
提前感谢您的任何建议
【问题讨论】:
-
不知道你为什么叫 sleep nasty,这是一种解决方法,但它确实有效......有没有办法检查 jms 队列是否在你的 await().asMost() 调用中包含一条消息?跨度>
-
使用
sleep()并不理想,因为它脆弱且效率低下。它很脆弱,因为如果机器速度更慢,那么睡眠时间仍然不够。这是低效的,因为如果机器加速,它将无缘无故地休眠。这真的可以加起来很多测试。 -
您是使用 Testcontainers 容器定义还是在代码中填充消息? Testcontainers 提供了几种等待策略:testcontainers.org/features/startup_and_waits 以防您将消息作为容器设置的一部分发送
标签: docker jms integration-testing testcontainers jms-queue