当特定的弹簧配置文件处于活动状态时,如何防止运行测试?

Posted

技术标签:

【中文标题】当特定的弹簧配置文件处于活动状态时,如何防止运行测试?【英文标题】:How to prevent running tests when specific spring profile is active? 【发布时间】:2019-07-06 05:04:25 【问题描述】:

我有一个基于 Maven 构建的 Spring Boot 应用程序。我正在使用 Spring 配置文件来区分特定于环境的配置。我想在特定的 Spring 配置文件处于活动状态时阻止运行测试。原因:我想阻止使用生产属性运行测试 (spring.profiles.active=prod)。我想在全局范围内(可能使用一些 Maven 插件)而不是分别在每个测试中执行此操作。

您对此有任何经过检查的解决方案吗?

【问题讨论】:

为什么不在构建参数中使用-DskipTests。例如mvc clean install -DskipTests=true 事实并非如此。我想防止有人跑mvn clean test -Dspring.profiles.active=prod 【参考方案1】:
<profiles>
    <profile>
        <id>prod</id>
        <properties>
            <maven.test.skip>true</maven.test.skip>
        </properties>
    </profile>
</profiles>

【讨论】:

这与 Maven 配置文件有关,而不是 Spring 配置文件。【参考方案2】:

你可以使用@IfProfileValue注解。但是您必须向您的活动配置文件添加一些值并使用提到的注释阅读它。您可以在此处阅读更多内容(第 3.4.3 节):https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#integration-testing

编辑: 另一种解决方案是排除 Surefire 插件中的所有(或选定的测试)测试:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <excludes>
         <exclude>$exclude.tests</exclude>
        </excludes>
      </configuration>
</plugin>
...
<profile>
  <id>prod</id>
  <properties>
    <exclude.tests>**/*.*</exclude.tests>
  </properties>
</profile>

然后当您运行mvn clean test -Pprod 时,所有测试都将被跳过

【讨论】:

但我需要在每个测试中添加@IfProfileValue。我不想这样做。 @PiotrPradzynski 我已经更新了我的答案。也许第二种解决方案会以某种方式帮助您 谢谢,但这与 Maven 配置文件有关,而不是 Spring 配置文件。

以上是关于当特定的弹簧配置文件处于活动状态时,如何防止运行测试?的主要内容,如果未能解决你的问题,请参考以下文章

当执行器处于活动状态时,我应该使用哪个注释来防止弹簧引导保护我的控制器

如何强制弹簧只有一个活动配置文件?

Swift 防止 TabBar 在键盘处于活动状态时向上移动

Vuejs:当特定选项卡处于活动状态时是不是会发出事件(bootstrap-vue)

当 jvm 在 IBM-JDK 中处于活动状态时如何生成核心转储文件

当 Web 应用程序处于活动状态时,如何在开发环境中运行 MVC 6 Web 应用程序 [重复]