仅在设置了特定的弹簧轮廓的情况下才运行集成测试

时间:2018-11-15 13:36:49

标签: spring spring-boot spring-profiles integration-testing

我们的Spring Boot应用程序中有多个测试类。有些类包含集成测试,有些包含单元测试。 这意味着如果我(例如,使用maven)让所有测试都执行,它将在所有类中运行所有测试。

我想实现的是,仅在设置了特定的弹簧轮廓(例如,通过application.yml。 我喜欢注释整个测试类,以定义仅在设置了指定的弹簧轮廓后才执行此类中的测试。 如果未设置,则将忽略这些测试。

  • 主题How can I use @IfProfileValue to test if a Profile is active?恰好朝这个方向发展。 @IfProfileValue乍一看就像我需要的一样。 但正如指出的那样,事实并非如此。如果要设置特定的系统属性,则可以使用它。但是我需要使用真实的弹簧配置文件(而不是系统属性spring.profiles.active-这会忽略通过application.yml设置的配置文件)
  • @Profile似乎也正是我所需要的,但是正如主题Use @Profile to decide to execute test class所示,我们不应该使用它。

那么该怎么做呢? 请注意,关于堆栈溢出的测试和弹簧轮廓有很多问题。但是大多数都指出了如何在特定于弹簧轮廓的测试中设置配置。那不是我想要的。 我想执行或忽略测试。

2 个答案:

答案 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,则测试将运行,否则将被忽略。

来源:Conditionally ignoring tests in JUnit 4

答案 1 :(得分:0)

使用JUnit 5,可以使用@Autowired Environment检查配置文件是否处于活动状态@BeforeEach测试正在运行:         Assumptions.assumeTrue(Arrays.asList(this.environment.getActiveProfiles()).contains("integration"));

这将检查名为“集成”的配置文件,并且无论配置文件的设置方式如何(系统属性,环境变量,application.yml等)都可以正常工作。

如果配置文件未处于活动状态,则测试将被忽略,这与使用@Disabled注释类似。