2017-02-09 103 views
1

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

这里是一个示例代码:

@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. 我在哪里可以找到一个类似定义流程的测试实例(S)?或者至少,有关该主题的一些教程或文章?
  2. 什么是模拟JMS连接的最佳方式?
  3. 如何在流配置中未明确定义通道时引用通道?优选地,我想在我的测试配置中自动装入通道,然后向其发送示例消息。类似于jmsInputChannel.send(testMessage);
  4. 有什么方法可以在测试中使用MessageHistory?

谢谢。

回答

2

好,亚历克斯,

既然你找不到任何样品,也不物品或其他任何东西,这意味着就是没有这样的。

仅仅因为Spring Integration没有自以为是的测试工具。

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

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

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

我们使用真正的嵌入式ActiveMQ进行测试。它只是通过ConnectionFactory自动启动代理并正确填充所有目的地。虽然你可以找到在spring-integration-jms测试一些Stub*类: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

+0

嗨Artem。非常感谢您的详细回复。 – Alex