【问题标题】:How to write Unit Tests on IntegrationFlow components?如何在 IntegrationFlow 组件上编写单元测试?
【发布时间】:2018-08-06 16:21:21
【问题描述】:

我有几个@Configuration 类,其中包括由@Bean 注释的高度复杂的IntegrationFlows。我想对这些流程中使用的每个组件进行单元测试。例如:

@Configuration
public class FirstClass{

@Bean
public MessageChannel requestChannel() {
return MessageChannels.direct().get();
}

@Bean
public MessageChannel responseChannel() {
return MessageChannels.direct().get();
}

@Bean
public IntegrationFlow myFlow(MessageChannel requestChannel, MessageChannel responseChannel) {
return from(requestChannel)...transform(this::myFirstCustomTransformer)....transform(this::mySecondCustomTransformer)...get();
} 

//sorry for the continues dots, they indicate the existence of other components as well

private Map<String, Object> myFirstCustomTransformer(Map<String, Object> payload){
//do some stuff
}

private String mySecondCustomTransformer(Map<String, Object> payload) {
//do some stuff
}}

所以我想在单元测试中测试mySecondCustomTransformermyFirstCustomTransformer。我怎样才能做到这一点?哪个是最好的解决方案?

*更新

这些转换器包括对同样属于同一类成员的方法的调用。因此,还必须为其余方法开发单元测试。

【问题讨论】:

    标签: java spring-integration spring-test spring-integration-dsl


    【解决方案1】:

    .transform(this::myFirstCustomTransformer) 创建了一个消费者端点组件,该组件能够通过其inputChannel 接收消息。然后它会在myFirstCustomTransformer 方法中调用您的自定义代码,并将调用结果发送到MessageTransformingHandleroutputChannel

    因此,您在流程中需要的是 .channel() 之前和之后的 .transform()。然后在单元测试中向inputChannel 发送测试消息并在outputChannel 中验证结果。

    我同意我们需要想出一些更简单的东西作为开箱即用的解决方案,但首先让我们从您的用例开始!

    【讨论】:

    • 感谢 Artem 的回复。我已经想到了这个解决方案并且它有效。您能否检查我的问题中的更新?我需要进行更多的单元测试来隔离这些在变压器内部调用的方法。有什么建议吗?谢谢你:)
    • myFirstCustomTransformermySecondCustomTransformer 调用的方法已经超出了 Spring Integration 的范围。如果您需要对它们进行单元测试,则应从测试中手动调用它们。如果它们是 private,除非以某种方式使它们可见,否则您别无选择:或 @VisibleForTesting 或反射。
    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 2017-10-15
    • 2012-02-03
    • 2019-01-28
    • 2021-04-16
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多