如何为所有@SpringBootTest配置默认SpringBoot启动类?
SpringBoot多启动类场景下@SpringBootTest的默认配置优化方案
问题场景
- 项目存在两个标注
@SpringBootApplication的类,通过特性开关控制加载,业务运行正常 - SpringBoot测试中,必须显式在
@SpringBootTest注解里指定classes = SpringBootApplicationToUse.class才能运行 - 仅使用
@SpringBootTest时会触发错误:
[main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [org.bla.foo.ThisIsSomeTest]: ThisIsSomeTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration。
无需修改所有@SpringBootTest的解决方案
1. 自定义测试父类
创建抽象父类并预配置好启动类,所有测试类继承该类即可:
@SpringBootTest(classes = SpringBootApplicationToUse.class) public abstract class BaseSpringBootTest { // 仅作为父类提供配置,无需额外代码 }
测试类继承使用:
public class ThisIsSomeTest extends BaseSpringBootTest { // 编写测试逻辑 }
2. 全局测试配置类+spring.factories
创建全局测试配置类导入目标启动类:
@Configuration @Import(SpringBootApplicationToUse.class) public class TestDefaultConfig { }
在src/test/resources下创建spring.factories文件,添加配置让Spring Test自动加载该类:
org.springframework.test.context.TestConfiguration=org.bla.foo.TestDefaultConfig
此后所有@SpringBootTest会自动识别该配置,无需逐个指定classes参数。
3. 结合测试环境配置开关
如果启动类的选择原本依赖配置文件开关,可在测试环境配置文件(如application-test.properties)中设置默认启用的启动类参数,再给测试类添加@ActiveProfiles("test")注解,让测试加载指定配置自动匹配目标启动类。
内容的提问来源于stack exchange,提问作者Roman L.
相关产品推荐
相关产品推荐

