2

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

  • 如果连接到我发送的通道的服务激活器正确处理了消息
  • 如果在出现任何错误的情况下调用了适当的消息错误处理过程

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

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

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

有什么线索吗?

请不要评论不执行真实单元,而是集成测试等。我知道我在做什么。

4

1 回答 1

4

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

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

于 2013-04-23T12:08:37.263 回答