我一直在使用Spring Integration DSL来实现一些消息传递处理流程。
我如何实际单元测试单个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");
}
我该如何测试?
问候!
答案 0 :(得分:3)
似乎对我来说&#34;单元测试&#34;意味着检查系统特定部分的行为,一些小组件。
所以,在你的情况下,它是new GenericTransformer
。
所以,只需将其作为顶级组件并针对其隔离的实例执行测试!
也可以针对目标IntegrationFlow
执行集成测试。
流程定义中的每个EIP组件都被包围
MessageChannel
s - input
和output
。即使您没有在那里声明.channel()
,框架也会构建隐式DirrectChannel
以将端点连接到流。
那些隐式获取bean名称如下:
channelBeanName = flowNamePrefix + "channel" +
BeanFactoryUtils.GENERATED_BEAN_NAME_SEPARATOR + channelNameIndex++;
因此,由于您的IntegrationFlow
来自Lambda,因此.transform()
的输入渠道只是流量的输入 - transformMessage.input
。
.transform()
和下一个.handle()
之间的通道的bean名称如下:transformMessage.channel#0
,因为它将是第一个隐式通道声明。
您可以@Autowired
将这两个渠道ChannelInterceptor
添加到测试用例中,并在测试前将ChannelInterceptor
添加到其中。
$document[0].activeElement
可以扮演验证角色,以确保您发送到变换器并从预期的正确数据中接收。
可以在此处找到更多信息:https://github.com/spring-projects/spring-integration-java-dsl/issues/23
答案 1 :(得分:2)
此处可以使用testing-samples project in the samples repo中描述的相同技术。
向频道entrypoint
发送消息并订阅QueueChannel
以获取结果(或在测试用例中将其更改为<colors>
<color id='mnemonic1'>RRGGBB1</color>
<color id='mnemonic2'>RRGGBB2</color>
<color id='mnemonic3'>RRGGBB3</color>
<color id='mnemonic4'>RRGGBB4</color>
</colors>
。
答案 2 :(得分:0)
DSL IntegrationFlows测试示例在github。