2016-08-19 2 views
6

У меня возникли проблемы с написанием тестовых примеров для моего IntegrationFlow, который использует Spring Integration DSL. Ниже приведен фрагмент кода, и я бы хотел проверить часть «transform». Просьба предоставить некоторую помощь в насмешливой части ручки или если есть какой-то другой способ проверить это -IntegrationTests для Spring 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

У нас нет mocking framework еще, но это действительно намерение в ближайшее время.

Вы можете использовать @MockBean от новейших Spring Boot для вашего HttpRequestExecutingMessageHandler httpMessageHandlerSpec, чтобы заменить этот фасоль желаемым макетом.

С другой стороны, вы можете просто отправить сообщение непосредственно на input channel за то, что ваш .transform. Пожалуйста, прочитайте эту инструкцию по фразе:

По умолчанию конечных точек подключается через DirectChannel, где имя бин на основе шаблона: [IntegrationFlow.beanName] .channel # [channelNameIndex].

Таким образом, необходимый канал в вашем потоке имеет bean-имя: dmwGetProductDetailsByEan.channel#0, потому что это первый неназванный канал в вашем определении IntegrationFlow.

Смежные вопросы