gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:17:26 34 4
gpt4 key购买 nike

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

  • 如果消息被连接到我发送的 channel 的服务激活器正确处理
  • 如果出现任何错误,是否调用了适当的消息错误处理程序

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

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

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

有什么线索吗?

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

最佳答案

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

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

关于java - 如何检查是否或等待消息处理完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168250/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com