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

时间:2017-02-09 23:50:28

标签: spring spring-integration

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

以下是示例代码:

@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();
}

我正在使用这篇文章来实现上面的代码 - https://spring.io/blog/2014/11/25/spring-integration-java-dsl-line-by-line-tutorial。但是,我无法找到有关该代码测试的信息。

我对上面的代码有几个问题:

  1. 在哪里可以找到类似定义流程的测试示例?或者至少,有关该主题的一些教程或文章?
  2. 模拟JMS连接的最佳方法是什么?
  3. 如果未在流配置中明确定义通道,我如何获得对通道的引用?最好,我想在我的测试配置中自动装配通道,然后向它发送一个示例消息。像jmsInputChannel.send(testMessage);
  4. 之类的东西
  5. 有没有办法在测试中使用MessageHistory?
  6. 谢谢。

1 个答案:

答案 0 :(得分:2)

嗯,Alex,

既然你找不到任何样本,也没有任何文章或其他内容,那就意味着没有那样的东西。

仅仅因为Spring Integration没有固定的测试工具。

我们仍然试图提出一些建议并鼓励社区分享他们对此事的看法:https://github.com/spring-projects/spring-integration-java-dsl/issues/23

正如你所看到的那样没有那么多进展。

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

我们使用真正的嵌入式ActiveMQ进行测试。它只是通过ConnectionFactory自动启动代理并正确填充所有目的地。虽然您可以在Stub*测试中找到一些spring-integration-jms类:https://github.com/spring-projects/spring-integration/tree/master/spring-integration-jms/src/test/java/org/springframework/integration/jms

您也可以获得对这些隐式渠道的引用:https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference#message-channels

  

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

因此,在您的情况下,Jms.messageDrivenChannelAdapter()之后和transform()之前的频道的bean名称为fileProcessingFlow.channel#0

您对MessageHistory的担忧不确定。您只需在测试工具中再添加一个@Configuration类,即可声明@EnableMessageHistory