【问题标题】:Integration test for the flow (Java DSL configuration)流的集成测试(Java DSL 配置)
【发布时间】:2017-06-28 04:39:32
【问题描述】:

我正在尝试对流配置进行一些测试。我将 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. 有什么方法可以在测试中使用 MessageHistory 吗?

谢谢。

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    好吧,亚历克斯,

    由于您找不到任何样本、文章或其他任何东西,这意味着没有类似的东西。

    仅仅因为 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() 之前的通道具有类似 fileProcessingFlow.channel#0 的 bean 名称。

    不确定您是否关心MessageHistory。您可以简单地在您的测试工具中再添加一个@Configuration 类,您可以在其中声明@EnableMessageHistory

    【讨论】:

    • 您好,Artem。非常感谢您的详细回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多