2017-02-02 38 views
1

我一直在使用Spring集成DSL來實現一些消息處理流程。如何對Spring IntegrationFlow進行單元測試?

我怎樣才能真正單元測試單個IntegrationFlow,誰能給我提供一個例子就如何進行單元測試,即改變這個bean的一部分:

@Bean 
public IntegrationFlow transformMessage(){  
    return message -> message    
      .transform(new GenericTransformer<Message<String>, Message<String>>() { 
       @Override 
       public Message<String> transform(Message<String> message) { 

        MutableMessageHeaders headers = 
          new MutableMessageHeaders(message.getHeaders()); 
        headers.put("Content-Type", "application/json"); 
        headers.put("Accept", "application/json");      

        String payload = "Long message"; 
        ObjectMapper mapper = new ObjectMapper(); 

        HashMap<String, String> map = new HashMap<>(); 
        map.put("payload", payload); 

        String jsonString = null; 
        try { 
         jsonInString = mapper.writeValueAsString(map); 
        } catch (JsonProcessingException e) { 
         logger.error("Error:" + e.getMessage());        
        } 

        Message<String> request = new GenericMessage<String>(jsonString 
        , headers);          
        return request;     
       } 
      }) 
      .handle(makeHttpRequestToValidateAcdrMessage())              
      .enrichHeaders(h -> h.header("someHeader", "blah", true)) 
      .channel("entrypoint"); 
} 

如何測試呢?

問候!

回答

1

對我來說似乎「單元測試」是指檢查系統某個小部件的特定部分的行爲。

所以,在你的情況下,這是關於那new GenericTransformer

因此,只需將其作爲頂級組件並對其隔離的實例執行測試即可!

集成測試也可以針對目標IntegrationFlow執行。

流量定義中的每個EIP組件都包圍着 MessageChannel s-inputoutput。即使您沒有在那裏聲明.channel(),Framework也會構建隱含的DirrectChannel以將端點連接到流。

那些隱含獲得bean的名字,如:

channelBeanName = flowNamePrefix + "channel" + 
           BeanFactoryUtils.GENERATED_BEAN_NAME_SEPARATOR + channelNameIndex++; 

那麼,既然你IntegrationFlow是LAMBDA,輸入通道形成.transform()只是流的輸入 - transformMessage.input

.transform()與下一個.handle()之間的通道具有如下名稱:transformMessage.channel#0,因爲它將是第一個隱式通道聲明。

您可以將@Autowired這兩個通道都添加到您的測試案例,並在測試前向其添加ChannelInterceptor

ChannelInterceptor可能會發揮驗證器角色,以確保您發送到變壓器並從預期的正確數據接收。

更多信息可以在這裏找到:https://github.com/spring-projects/spring-integration-java-dsl/issues/23

相關問題