Spring Integration 窃听直接 MessageChannel 进行测试

Posted

技术标签:

【中文标题】Spring Integration 窃听直接 MessageChannel 进行测试【英文标题】:Spring Integration wiretap direct MessageChannel for Testing 【发布时间】:2018-06-14 06:29:06 【问题描述】:

我想对两个同样使用 Spring 集成流的 Spring Boot 应用程序进行集成测试。为了测试我的应用程序,我想检查通过myMessageChannel 发送的消息。它是在其中一个应用程序的 XML 流中定义的。

如何窃听我的直接消息通道并将消息重定向到 PollableChannel,以便我可以一一阅读它们? 我在网上找到的方法都不适合我。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App1.class, App2.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource("classpath:integration.properties")
public class MyWireTapTest 

    @Autowired
    MessageChannel myMessageChannel;

    @Test
    public void test() 


        // This is basically what I want to do
        // But it does not work, since it is a direct channel
        myMessageChannel.recieve();

    

【问题讨论】:

【参考方案1】:

将其自动连接为AbstractMessageChannel 并使用

myMessageChannel.addInterceptor(new WireTap(tapChannel));

【讨论】:

【参考方案2】:

我写了一个示例演示如何做到这一点(通过 XML 配置):

https://github.com/hakanozbay/spring-integration-testing

【讨论】:

以上是关于Spring Integration 窃听直接 MessageChannel 进行测试的主要内容,如果未能解决你的问题,请参考以下文章

测试 Spring-Integration 与订阅者通道

Spring Integration 的 XMPP 通道适配器

spring integration:如何从 Spring Controller 调用 Spring Integration?

MyBatis(3.2.3) - Integration with Spring

INTEGRATION TESTING WITH SPRING AND JUNIT

Spring Integration Dispatcher 没有频道订阅者