Junit 如何对Spring IntegrationFlow进行单元测试?
我一直在使用SpringIntegrationDSL来实现一些消息处理流程 我如何才能真正对单个IntegrationFlow进行单元测试,有人能给我提供一个关于如何进行单元测试的示例吗,即转换这个bean的一部分:Junit 如何对Spring IntegrationFlow进行单元测试?,junit,spring-integration,dsl,spring-annotations,Junit,Spring Integration,Dsl,Spring Annotations,我一直在使用SpringIntegrationDSL来实现一些消息处理流程 我如何才能真正对单个IntegrationFlow进行单元测试,有人能给我提供一个关于如何进行单元测试的示例吗,即转换这个bean的一部分: @Bean public IntegrationFlow transformMessage(){ return message -> message .transform(new GenericTran
@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");
}
@Bean
public IntegrationFlow transformMessage(){
返回消息->消息
.transform(新的GenericTransformer(){
@凌驾
公共消息转换(消息消息){
MutableMessageHeaders=
新的MutableMessageHeaders(message.getHeaders());
headers.put(“内容类型”、“应用程序/json”);
headers.put(“接受”、“应用程序/json”);
String payload=“长消息”;
ObjectMapper mapper=新的ObjectMapper();
HashMap=newHashMap();
地图放置(“有效载荷”,有效载荷);
字符串jsonString=null;
试一试{
jsonInString=mapper.writeValueAsString(map);
}捕获(JsonProcessingException e){
logger.error(“错误:+e.getMessage());
}
消息请求=新的GenericMessage(jsonString
,标题);
返回请求;
}
})
.handle(makeHttpRequestToValidateAdrMessage())
.EnrichHeader(h->h.header(“someHeader”,“blah”,true))
.通道(“入口点”);
}
我如何测试它
问候 对我来说,“单元测试”意味着检查系统特定部分的行为,一些小组件
因此,在您的案例中,它是关于新的通用变压器
因此,只需将其作为顶级组件,并对其独立实例执行测试即可
集成测试也可以针对目标IntegrationFlow
执行
流定义中的每个EIP组件都由
MessageChannel
s-input
和output
。即使您没有在那里声明.channel()
,框架也会隐式构建directchannel
,以将端点连接到流
这些隐式函数将获得如下bean名称:
channelBeanName = flowNamePrefix + "channel" +
BeanFactoryUtils.GENERATED_BEAN_NAME_SEPARATOR + channelNameIndex++;
因此,由于您的IntegrationFlow
来自Lambda,因此构成.transform()
的输入通道只是流的输入-transformMessage.input
.transform()
和下一个.handle()
之间的通道具有如下bean名称:transformMessage.channel#0
,因为它将是第一个隐式通道声明
您可以将这两个通道@Autowired
添加到您的测试用例中,并在测试之前向它们添加ChannelInterceptor
ChannelInterceptor
可能扮演验证器的角色,以确保您向转换器发送和接收正确的数据
更多信息可在此处找到:此处可以使用中描述的相同技术
将消息发送到通道
转换。输入并订阅入口点
,以获得结果(或在您的测试用例中将其更改为队列通道
。DSL IntegrationFlows测试示例已打开