我想使用Spring-Integration框架对应用程序执行JUnit测试。我想测试的是:
我正在使用JMocikt来验证是否调用了预期的方法。我通过在消息频道上调用send
来开始测试。
问题是:如何等待消息处理结束? Spring集成会生成多个线程并立即发送消息通道返回。我已经尝试过的是:
IntegrationMBeanExporter.stopActiveComponents(false, 0)
- 由于线程中断而失败null
,在这种情况下,它无法链接。另外,我不喜欢它,因为我必须改变测试中的SI配置。任何线索?
请不要评论没有执行真正的单位,而是集成测试等。我知道我在做什么。
答案 0 :(得分:4)
测试用例中最常用的技术是用QueueChannel
替换最终通道,将其注入测试用例并执行assertNotNull(finalChannel.receive(5000)
。您甚至可以测试收到的消息,以验证它是否包含预期的数据。
当您使用异步处理并且最终服务未返回结果(或null
)时,这有点棘手。在这种情况下,您可以将最终频道设为<publish-subscribe-channel/>
,并在测试用例中添加第二个订阅者(具有更高的order
属性),例如<bridge/>
到{ {1}},然后QueueChannel
上面的结果。