【问题标题】:Integration testing of JMSJMS的集成测试
【发布时间】: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


    【解决方案1】:

    想通了:

    类似这样的:

    Boolean messageWaiting = true;
    while (messageWaiting) {
        messageWaiting =
             jmsTemplate.browse(myQueue,
                               (session, browser) -> browser.getEnumeration().hasMoreElements());
    }
    

    使用这个而不是线程睡眠,它似乎等待足够长的时间来消耗消息,但不会更长。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2015-11-20
      • 2012-08-03
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多