我已经建立了一个简单的Spring Integration流程,该流程由以下步骤组成:
请遵守以下代码:
@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);
}
}
这很出色,但是,我正在努力提出一些好的测试。
MessageSource
?答案 0 :(得分:0)
问题太多,其中一些问题需要太宽泛的解释。无论如何,我认为您可以从Spring Integration Testing Framework及其documentation开始。
我应该如何模拟外部REST API?
我认为您可以考虑使用来自Spring Framework的Mock MVC及其MockMvcClientHttpRequestFactory
基于HttpRequestExecutingMessageHandler
注入HttpMessageHandlerSpec
。
重试政策生效
好吧,我想同一个模拟的MVC端点可以验证它被调用了多少次,并且第一次失败以启动该重试。
如何更改MessageSource
这正是带有MockIntegration.mockMessageSource()
和MockIntegrationContext
:https://docs.spring.io/spring-integration/docs/5.1.6.RELEASE/reference/html/#mockintegration
成为Kafka主题吗?
或者您提到的MockIntegration.mockMessageHandler()
来验证是否已调用Kafka的端点。或使用Spring Kafka项目中的Embedded Kafka
:https://docs.spring.io/spring-kafka/docs/2.2.7.RELEASE/reference/html/#embedded-kafka-annotation