Spring IntegrationFlow的IntegrationTests

时间:2016-08-19 07:43:03

标签: spring-integration

我在为使用Spring Integration DSL的IntegrationFlow编写测试用例时遇到了麻烦。下面是我的代码片段,我想测试一下'转换'部分。请提供一些模拟句柄部分的帮助,或者是否有其他方法来测试它 -

public class DmwConfig {
    @Value("${dmw.url.hostname}")
    public String hostName;

    @Bean
    public MessageChannel dmwGetProductDetailsByEanChannel() {
        return MessageChannels.direct().get();
    }

    @Bean
    public IntegrationFlow dmwGetProductDetailsByEan() {
        return IntegrationFlows
                .from("input")
                .channel("dmwGetProductDetailsByEanChannel")
                .handle(httpMessageHandlerSpec())
                .<JsonNode, ProductModel>transform(
                        node -> new ProductModel(
                            node.findValue("name").asText(null),
                            node.findValue("inventory").findValue("orderable").asBoolean(false),
                            node.findValue("stock_level").asInt(0),
                            node.findValue("price").asDouble(0),
                            "", // this url field will be enriched in the controller because the url doesn't contain any data from the response
                            node.findValue("image_groups").findValue("link").asText(null)
                        )
                )
                .get();
    }

    @Bean
    public HttpRequestExecutingMessageHandler httpMessageHandlerSpec() {
        return Http
                .outboundGateway((Message<DmwPayload> p) -> "foobar url")
                .charset("UTF-8")
                .httpMethod(HttpMethod.GET)
                .expectedResponseType(JsonNode.class).get();
    }
}

1 个答案:

答案 0 :(得分:1)

我们还没有mocking framework,但这是最近的意图。

您可以考虑使用@MockBean的最新HttpRequestExecutingMessageHandler httpMessageHandlerSpec中的.transform来替换所需的模拟bean。

另一方面,您可以直接向dmwGetProductDetailsByEan.channel#0的{​​{3}}发送消息。请从以下短语中阅读该手册:

  

默认情况下,端点通过DirectChannel连接,其中bean名称基于以下模式:[IntegrationFlow.beanName] .channel#[channelNameIndex]。

因此,您的flow中的必需通道具有bean名称:_dial = new Dialog(this); _dial.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); _dial.setContentView(_view); _dial.show(); ,因为这是IntegrationFlow定义中的第一个未命名通道。