2015-04-21 78 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