带有队列通道的Spring Integration测试

问题描述 投票:0回答:1

在Spring Integration中,我有一个看起来像这样的DSL设置:

                                       --->                                        --->
                                       --->                                        --->
Messages --> Gateway ---> QueueChannel ---> MessageHandler(worker) -> QueueChannel ---> MH worker2 --> ...
                                       --->                                        --->
                                       --->                                        --->

我想为此编写一个集成测试,它将测试消息是否在正确的通道中。我现在不在任何地方充实标题,所以我想使用:

this.someChannel.receive(TIMEOUT)

不幸的是,据我所知,它仅阻塞测试的主线程,而不是全部,因此它无法接收异步发送的任何消息。我知道,存在类似的东西:

this.someChannel.getReceiveCount()

它给了我很好的结果,但是检查它对我来说还不够。我该如何处理,以异步方式接收发送到队列的消息?

编辑:重要的是,我需要它,因为在执行工作流期间消息已更改

spring testing spring-integration spring-integration-dsl
1个回答
0
投票

您可以在测试中的那些队列通道中添加通道拦截器,以跟踪通过这些通道传入的内容。当然,在测试中,您需要有一些障碍来等待异步消息,或者只是阻塞队列以在测试结束时收集它们以进行验证。另一种方法是在两者之间模拟或监视消息处理程序,但再次使用类似的CountDownLatchBlockingQueue线程屏障来等待异步消息。在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/testing.html#test-context

© www.soinside.com 2019 - 2024. All rights reserved.