2015-04-21 81 views
2

我是春季整合新手。我需要爲整數圖編寫單元測試。該圖從網關 - >分離器 - >濃縮器 - >聚合器 - >變壓器開始。所以如果我想單獨爲豐富者編寫一個單元測試,我該如何去做。如何在春季集成中進行單元測試?

我提到this文章,但他們都只有一個組件。但是,在這種情況下如何做到這一點。

回答

3

目前尚不清楚爲什麼您引用的答案引用的測試樣本不能幫助您。流程中有什麼並不重要;其基本思想是將一條消息發送到流程的開始,並檢查流程結束後的結果,也許通過用一個隊列通道替換最後一個通道,您可以從您的測試案例中輪詢。

你可以stop()最終消費者,所以他不抓住結果。

編輯:(迴應下面的評論)。

可以搶佔組件的輸出通道......

... 

<int:channel id="toHE"/> 

<int:header-enricher id="he" input-channel="toHE" output-channel="fromHE"> 
    <int:header name="foo" value="bar"/> 
</int:header-enricher> 

<int:channel id="fromHE"/> 

... 

然後......

@Autowired 
private MessageChannel toHE; 

@Autowired 
@Qualifier("he.handler") 
private MessageTransformingHandler headerEnricher; 

@Test 
@DirtiesContext 
public void testEnricher() { 
    PollableChannel outputChannel = new QueueChannel(); 
    headerEnricher.setOutputChannel(outputChannel); 
    toHE.send(MessageBuilder.withPayload("baz").build()); 
    Message<?> out = outputChannel.receive(10000); 
    assertNotNull(out); 
    assertEquals("bar", out.getHeaders().get("foo")); 
} 
+0

如果我想測試富集獨自一人,我已經把消息發送到通道和輸出自動流向聚合器在我的例子中,如何重新路由和檢查..? – Manoj

+0

請參閱已編輯的答案。 –

+0

謝謝..那麼testEnricher()將確保消息不會從HE中進入通道,而是轉到testEnricher中定義的輸出通道? ...流量會停止嗎? – Manoj