我目前正在学习spring集成框架。因此,如果我的问题很荒谬,请原谅并纠正我。如何或有一种方法可以模拟http出站网关来运行我的单元tastcase?
public IntegrationFlow sendSms() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
final JsonObjectMapper<?, ?> mapper = new Jackson2JsonObjectMapper(objectMapper);
return IntegrationFlows.from("sendSmsGatewayRequestChannel")
.handle(Http
.outboundGateway(environment.getProperty("integration.sms.endpoint")
+ "?ProductType={ProductType}&MobleNo={MobleNo}&smsType={smsType}&Message={Message}")
.expectedResponseType(String.class).httpMethod(HttpMethod.GET)
.uriVariableExpressions(createExpressionMap()))
.transform(Transformers.fromJson(SmsResponseDto.class, mapper)).get();
}
这是我的整合流程。
另外,我们可以使用嘲讽来测试入站网关吗?
向处理程序添加一个bean id,
@Bean
public IntegrationFlow sendSms() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
final JsonObjectMapper<?, ?> mapper = new Jackson2JsonObjectMapper(objectMapper);
return IntegrationFlows.from("sendSmsGatewayRequestChannel")
.handle(Http.outboundGateway(smsEndpoint).expectedResponseType(String.class).httpMethod(HttpMethod.GET)
.uriVariableExpressions(createExpressionMap()), **e -> e.id("smsOutboundGateway")**)
.transform(Transformers.fromJson(SmsResponseDto.class, mapper)).get();
}
那么你可以模拟响应,
final ArgumentCaptor<Message<?>> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
final MessageHandler mockMessageHandler = MockIntegration.mockMessageHandler(messageArgumentCaptor)
.handleNextAndReply(m -> MessageBuilder.withPayload(
"response")
.build());
mockIntegrationContext.substituteMessageHandlerFor("smsOutboundGateway", mockMessageHandler);
注意:我是Spring集成的新手。所以我不知道这是否是正确的方法。无论如何,它的工作:D。正确,如果我错了。:)
感谢Artem Bilan的帮助。
您的代码和逻辑是完全正确的。由于本质
Http.outboundGateway()
上是基于的,因此可以使用它来模拟HTTP请求。在流程的任何集成点都可以执行相同的操作。HttpRequestExecutingMessageHandler
MessageHandler
substituteMessageHandlerFor
随时欢迎!是时候考虑一下了:stackoverflow.com/help/someone-answers
我已经创建了一个HttpRequestExecutingMessageHandler的实际bean。有没有办法像上述方法一样模拟其响应?我无法使用嘲笑IntegrationContext.substituteMessageHandlerFor。可以替代的是IntegrationConsumer bean。而不是HttpRequestExecutingMessageHandler bean。有什么办法可以嘲笑吗?
然后查看我的答案:Mock MVC适合您。尽管如果通过将消息发送到要模拟的终结点的通道来调用它,仍然可以使用替代方法。