在Spring Integration中,我有一个看起来像这样的DSL设置:
---> --->
---> --->
Messages --> Gateway ---> QueueChannel ---> MessageHandler(worker) -> QueueChannel ---> MH worker2 --> ...
---> --->
---> --->
我想为此编写一个集成测试,它将测试消息是否在正确的通道中。我现在不在任何地方充实标题,所以我想使用:
this.someChannel.receive(TIMEOUT)
不幸的是,据我所知,它仅阻塞测试的主线程,而不是全部,因此它无法接收异步发送的任何消息。我知道,存在类似的东西:
this.someChannel.getReceiveCount()
它给了我很好的结果,但是检查它对我来说还不够。我该如何处理,以异步方式接收发送到队列的消息?
编辑:重要的是,我需要它,因为在执行工作流期间消息已更改
您可以在测试中的那些队列通道中添加通道拦截器,以跟踪通过这些通道传入的内容。当然,在测试中,您需要有一些障碍来等待异步消息,或者只是阻塞队列以在测试结束时收集它们以进行验证。另一种方法是在两者之间模拟或监视消息处理程序,但再次使用类似的CountDownLatch
或BlockingQueue
线程屏障来等待异步消息。在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/testing.html#test-context