spring - 仅在设置了特定的弹簧配置文件时才运行集成测试
问题描述
我们的 Spring Boot 应用程序中有多个测试类。一些类包含集成测试,一些包含单元测试。这意味着如果我(例如使用 maven)让所有测试都被执行,它将运行所有类中的所有测试。
我想要实现的是,如果设置了特定的弹簧配置文件,例如通过 application.yml,则只执行集成测试。例如,我喜欢注释整个测试类以定义只有在设置了指定的弹簧配置文件时才执行此类中的测试。如果未设置,则应忽略这些测试。
- 主题如何使用 @IfProfileValue 测试配置文件是否处于活动状态?正是朝着这个方向发展。
@IfProfileValue
乍一看,这正是我所需要的。但正如它所指出的,事实并非如此。如果我要设置特定的系统属性,我可以使用它。但我需要使用真正的弹簧配置文件(而不是系统属性spring.profiles.active
- 这将忽略通过设置的配置文件application.yml
) @Profile
似乎看起来也是我需要的,但正如主题使用 @Profile 决定执行测试类所示,我们不应该使用它。
那么可以做些什么来实现这一目标呢?请注意,关于堆栈溢出的测试和弹簧配置文件有很多问题。但是他们中的大多数都指出了如何在特定于弹簧配置文件的测试中设置配置。那不是我要找的。我想执行或忽略测试。
解决方案
我不确切知道你想如何实现它,但如果你使用 junit 在运行时有条件地忽略一些测试,只需使用配置属性,这是一种方法:
应用程序属性:
test.enabled=true
然后在您的测试代码中,您可以使用org.junit.Assume
如下属性:
@Value("${test.enabled}")
private Boolean testEnabled;
@Test
public void test {
org.junit.Assume.assumeTrue(testEnabled);
// your test code
}
现在,如果您将该属性设置test.enabled
为 true,则测试将运行,否则将被忽略。
资料来源:有条件地忽略 JUnit 4 中的测试
推荐阅读
- sql - 如何在sql中使用来自同一表的数据更新表
- python - 如何使用程序名称在linux中杀死python程序
- rss - 更新 RSS 源中的 iTunes 所有者电子邮件
- prometheus - Prometheus 中的并发处理
- django-rest-framework - 如何从 SubFactory Django 单元测试中获取值
- plugins - 如何设置熔岩块的液位?Bukkit 1.15.2 插件
- java - 有没有办法在 1 个 dockercompose 实例(测试容器)上执行连续 n 个集成测试
- javascript - Stepformwizard 没有被隐藏。画面右侧溢出
- vue.js - 从子组件Vue检测到父组件的条目
- python - 使用 groupby 和 agg 查找时间间隔