【发布时间】:2016-09-13 10:12:02
【问题描述】:
我有一套集成测试,它为我的应用程序创建一个完整的 Spring 上下文,模拟其他应用程序的端点并运行测试,例如调用 REST 服务,然后检查数据库中的结果,即其他 web/REST 服务已被调用,依此类推。
我想测试的案例之一是使用 Spring Integration 处理 JMS 消息。对于这些测试用例,我创建了一个内存中的 ActiveMQ 代理,在其上放置一条消息,并检查消息的使用是否具有所需的结果。这种方法有一个我找不到好的解决方案的问题。
由于消息处理发生在与我的测试执行不同的线程中,因此我必须等待一段时间才能验证行为。现在我通过Thread.sleep 来做这件事,但我对此并不满意。首先,它增加了构建时间,其次,如果设置得太低,很容易出现随机错误。这会导致这些测试中的每一个都休眠 2 秒以确保结果。
有没有一种方法可以控制消息是否已被处理?一种通过 JmsTemplate 检查 ActiveMQ 代理的方法?
【问题讨论】:
标签: java junit jms spring-jms jmstemplate