我们的Spring Boot应用程序中有多个测试类。有些类包含集成测试,有些包含单元测试。 这意味着如果我(例如,使用maven)让所有测试都执行,它将在所有类中运行所有测试。
我想实现的是,仅在设置了特定的弹簧轮廓(例如,通过application.yml。 我喜欢注释整个测试类,以定义仅在设置了指定的弹簧轮廓后才执行此类中的测试。 如果未设置,则将忽略这些测试。
@IfProfileValue
乍一看就像我需要的一样。
但正如指出的那样,事实并非如此。如果要设置特定的系统属性,则可以使用它。但是我需要使用真实的弹簧配置文件(而不是系统属性spring.profiles.active
-这会忽略通过application.yml
设置的配置文件)@Profile
似乎也正是我所需要的,但是正如主题Use @Profile to decide to execute test class所示,我们不应该使用它。那么该怎么做呢? 请注意,关于堆栈溢出的测试和弹簧轮廓有很多问题。但是大多数都指出了如何在特定于弹簧轮廓的测试中设置配置。那不是我想要的。 我想执行或忽略测试。
答案 0 :(得分:2)
我不知道您到底想如何实现它,但是如果您使用junit仅通过配置属性在运行时有条件地忽略某些测试,这是一种方法:
application.properties:
org.junit.Assume
然后在测试代码中可以使用@Value("${test.enabled}")
private Boolean testEnabled;
@Test
public void test {
org.junit.Assume.assumeTrue(testEnabled);
// your test code
}
和类似以下的属性:
test.enabled
现在,如果您将属性2nd
设置为true,则测试将运行,否则将被忽略。
答案 1 :(得分:0)
使用JUnit 5,可以使用@Autowired Environment检查配置文件是否处于活动状态@BeforeEach测试正在运行:
Assumptions.assumeTrue(Arrays.asList(this.environment.getActiveProfiles()).contains("integration"));
这将检查名为“集成”的配置文件,并且无论配置文件的设置方式如何(系统属性,环境变量,application.yml等)都可以正常工作。
如果配置文件未处于活动状态,则测试将被忽略,这与使用@Disabled注释类似。