Spring Integration 5.1-集成流程测试-DSL

时间:2019-07-01 16:47:31

标签: spring-integration spring-integration-dsl spring-integration-http

我已经建立了一个简单的Spring Integration流程,该流程由以下步骤组成:

  1. 然后定期轮询一个休息api
  2. 对有效负载进行一些处理
  3. 并将其放在Kafka主题上。

请遵守以下代码:

@Component
public class MyIntegrationFlow extends IntegrationFlowAdapter {
    @Override
    protected IntegrationFlowDefinition<?> buildFlow() {
        return from(() -> List.of("pathVariable1", "pathVariable2"), c -> c.poller(Pollers.fixedDelay(5, TimeUnit.SECONDS)))
                .split()
                .handle(httpRequest(), c -> c.advice(new RequestHandlerRetryAdvice()))
                .transform(Tranformers.fromJson(Foo.class))
                .filter(payload -> payload.isValid())
                .log()
                .transform(Tranformers.toJson())
                .channel(Source.OUTPUT); // output channel for kafka topic
    }

    private HttpMessageHandlerSpec httpRequest() {
        return Http.outboundGateway("http://somehost:8080/{pathVariable}")
                .httpMethod(GET)
                .uriVariable("pathVariable", Message::getPayload)
                .expectedResponseType(String.class);
    }
}

这很出色,但是,我正在努力提出一些好的测试。

  • 我应该如何模拟外部REST API?
  • 我应该如何测试重试策略启动并发出所需数量的http请求?
  • 如何更改定期轮询的流(路径变量列表)的MessageSource
  • 如何检查有效载荷是否已成功进入Kafka主题?

1 个答案:

答案 0 :(得分:0)

问题太多,其中一些问题需要太宽泛的解释。无论如何,我认为您可以从Spring Integration Testing Framework及其documentation开始。

  1.   

    我应该如何模拟外部REST API?

我认为您可以考虑使用来自Spring Framework的Mock MVC及其MockMvcClientHttpRequestFactory基于HttpRequestExecutingMessageHandler注入HttpMessageHandlerSpec

  1.   

    重试政策生效

好吧,我想同一个模拟的MVC端点可以验证它被调用了多少次,并且第一次失败以启动该重试。

  1.   

    如何更改MessageSource

这正是带有MockIntegration.mockMessageSource()MockIntegrationContexthttps://docs.spring.io/spring-integration/docs/5.1.6.RELEASE/reference/html/#mockintegration

的Spring Integration Testing Framework的一部分。
  1.   

    成为Kafka主题吗?

或者您提到的MockIntegration.mockMessageHandler()来验证是否已调用Kafka的端点。或使用Spring Kafka项目中的Embedded Kafkahttps://docs.spring.io/spring-kafka/docs/2.2.7.RELEASE/reference/html/#embedded-kafka-annotation