【发布时间】:2017-04-25 11:18:11
【问题描述】:
我们开发了许多“内部”Spring Boot 启动器和自动配置,支持各种 NFR,例如日志记录、配置、安全等。
我们面临的最大测试挑战是如何测试@ConditionalOnClass 自动配置的不同组合。
例如:
@Configuration
@ConditionalOnClass(Foo.class)
public class Config1 {
}
@Configuration
@ConditionalOnClass(Bar.class)
public class Config2 {
}
@Configuration
@ConditionalOnMissingClass(Foo.class)
public class Config3 {
}
我们如何操作测试项目的类路径来测试类路径上存在的Foo 和Bar jar 文件的各种组合?那里有图书馆吗?我想知道 Spring 家伙是如何做到这一点的?
【问题讨论】:
-
为什么您需要对此进行测试,而不是对底层功能/组件进行单元测试?
ConditionalOn...到处都在使用并且极不可能被破坏,也就是说,是否真的值得您花时间测试框架无论如何都会完成的事情。 -
我们有多个
@ConditionalOnClassautoconfigurations,根据不同的类路径组合,它们的行为方式略有不同。这是一个美化的if-else语句,其中评估的布尔条件是类路径上是否存在特定 jar。 -
那么为什么不让客户端应用程序测试它们期望加载的内容,因为它们将具有正确/预期的类路径条件,如果这很关键,它们确实应该如此。否则,您将进入一个受伤的世界,因为您需要不同的 maven 配置文件来正确排除/设置依赖项,然后进行测试,但又为什么要这样做。自动配置很好,直到它不是,如果这些自动配置非常关键,也许配置不应该是自动的,而是通过注释元注释手动定义的。
-
@DarrenForsythe 感谢您的提示。我从来不知道可以将依赖项放在配置文件中!这可能正是我需要的。
-
你找到解决办法了吗?
标签: java spring-boot integration-testing