Spring 流的集成测试(Java DSL配置)

Spring 流的集成测试(Java DSL配置),spring,spring-integration,Spring,Spring Integration,我正在尝试为流配置实现一些测试。我将JMS入站通道适配器作为流的入口点,将出站文件通道适配器(附带ExpressionEvaluationRequestHandlerAdvice)作为最后一个端点 下面是一个示例代码: @Bean public IntegrationFlow fileProcessingFlow() { DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer(); dm

我正在尝试为流配置实现一些测试。我将JMS入站通道适配器作为流的入口点,将出站文件通道适配器(附带ExpressionEvaluationRequestHandlerAdvice)作为最后一个端点

下面是一个示例代码:

@Bean
public IntegrationFlow fileProcessingFlow() {
    DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
    dmlc.setConnectionFactory(connectionFactory);
    dmlc.setDestination(jmsQueue);

    return IntegrationFlows.from(Jms.messageDrivenChannelAdapter(dmlc))
        .<String, File>transform(p -> new File(p))
        .handle(headerEnricherService)
        .<Boolean>route("T(SomeEnum).INVALID.equals(headers['headerName'])", mapping -> mapping 
            .subFlowMapping(Boolean.TRUE, sf -> sf.handle(serviceRef, "handleInvalidFile"))
            .subFlowMapping(Boolean.FALSE, sf -> sf
                .handle(serviceRef, "handleValidFile")
                .handle(anotherServiceRef)))
        .filter(additionalFilterRef)
        .handle(Files.outboundAdapter("'output/dir/path'")
                     .autoCreateDirectory(true)
                     .deleteSourceFiles(true),
                c -> c.advice(fileCopyAdvice()))
        .get();
}
@Bean
公共集成流文件处理流(){
DefaultMessageListenerContainer dmlc=新的DefaultMessageListenerContainer();
dmlc.setConnectionFactory(连接工厂);
dmlc.setDestination(jmsQueue);
返回IntegrationFlows.from(Jms.messageDrivenChannelAdapter(dmlc))
.transform(p->新文件(p))
.handle(headerRicherService)
.route(“T(SomeEnum).INVALID.equals(headers['headerName'])”,映射->映射
.subFlowMapping(Boolean.TRUE,sf->sf.handle(serviceRef,“handleInvalidFile”))
.子流映射(Boolean.FALSE,sf->sf
.handle(serviceRef,“handleValidFile”)
.handle(另一个serviceref)))
.filter(附加FilterRef)
.handle(Files.outboundAdapter(“'output/dir/path'))
.autoCreateDirectory(true)
.deleteSourceFiles(true),
c->c.advice(fileCopyAdvice())
.get();
}
我用这篇文章来实现上面的代码-。然而,我无法找到有关测试该代码的信息

关于上述代码,我有几个问题:

  • 在哪里可以找到类似定义流的测试示例?或者至少是一些关于这个主题的教程或文章
  • 模拟JMS连接的最佳方式是什么
  • 当通道未在流配置中显式定义时,如何获取对通道的引用?最好是在测试配置中自动连接通道,然后向其发送示例消息。类似于
    jmsInputChannel.send(testMessage)
  • 有没有办法在测试中使用MessageHistory
  • 谢谢。

    好吧,亚历克斯

    既然你找不到任何样品,也找不到文章或其他东西,那就意味着没有类似的东西

    只是因为SpringIntegration没有一个固执己见的测试工具

    我们仍然试图想出一些办法,鼓励社区分享他们对这件事的想法

    正如你所看到的,没有那么多进步

    现在让我试着回答你的其他问题

    我们使用真正的嵌入式ActiveMQ进行测试。它只是通过
    ConnectionFactory
    自动启动代理,并正确填充所有目的地。尽管您可以在
    spring集成jms
    测试中找到一些
    Stub*
    类:

    您还可以获取对这些隐式通道的引用:

    默认情况下,端点通过
    DirectChannel
    连接,其中bean名称基于以下模式:
    [IntegrationFlow.beanName].channel#[channelNameIndex]

    因此,在您的例子中,
    Jms.messageDrivenChannelAdapter()之后和
    transform()之前的通道有一个bean名称,如
    fileProcessingFlow.channel\0


    不确定您对
    消息历史记录的担忧。您只需将一个以上的
    @Configuration
    类添加到您的测试线束中,就可以在其中声明
    @EnableMessageHistory

    Hi Artem。非常感谢您的详细回复。