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

标签 java spring-integration jmockit

我想使用 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/

相关文章:

java - spring集成中的几个任务执行器

java - 如何模拟InputStream和ByteString

java - 如何验证给定类的特定构造函数是否被调用?

java - 在java中制作一个unix守护进程

java - Android 计算器中不使用变量

java - 在 hibernate 搜索中使用一个查询获取具有关联的实体

spring-integration - Spring 集成和 REST 网关

java - 无法将所有十六进制值转换为二进制

sockets - Spring TCP Socket Integration 实现不传递 gateway.send 方法

mocking - JMockIt:是否可以在同一个 TestClass 中模拟同一个类两次,以验证不同场景中的行为