如何检查 - 或等待 - 消息处理完成?

时间:2013-04-23 11:30:22

标签: java spring-integration jmockit

我想使用Spring-Integration框架对应用程序执行JUnit测试。我想测试的是:

  • 如果连接到我发送的频道的服务激活器正确处理了该消息
  • 如果在出现任何错误时调用了正确的消息错误处理程序

我正在使用JMocikt来验证是否调用了预期的方法。我通过在消息频道上调用send来开始测试。

问题是:如何等待消息处理结束? Spring集成会生成多个线程并立即发送消息通道返回。我已经尝试过的是:

  • 使用IntegrationMBeanExporter.stopActiveComponents(false, 0) - 由于线程中断而失败
  • 尝试链接服务激活器(第一个:实际调用,第二个:完成通知) - 它失败,因为测试中的服务激活器返回null,在这种情况下,它无法链接。另外,我不喜欢它,因为我必须改变测试中的SI配置。

任何线索?

请不要评论没有执行真正的单位,而是集成测试等。我知道我在做什么。

1 个答案:

答案 0 :(得分:4)

测试用例中最常用的技术是用QueueChannel替换最终通道,将其注入测试用例并执行assertNotNull(finalChannel.receive(5000)。您甚至可以测试收到的消息,以验证它是否包含预期的数据。

当您使用异步处理并且最终服务未返回结果(或null)时,这有点棘手。在这种情况下,您可以将最终频道设为<publish-subscribe-channel/>,并在测试用例中添加第二个订阅者(具有更高的order属性),例如<bridge/>到{ {1}},然后QueueChannel上面的结果。