Warm tip: This article is reproduced from serverfault.com, please click

其他-如何在Spring集成中模拟出站网关

(其他 - how to mock outbound gateways in spring integration)

发布于 2020-11-30 13:25:23

我目前正在学习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();
    }

这是我的整合流程。

另外,我们可以使用嘲讽来测试入站网关吗?

Questioner
Sanal M
Viewed
0
Sanal M 2020-12-07 15:39:58

向处理程序添加一个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的帮助。