java - 在 maven java 项目运行时获取激活的配置文件名称列表

标签 java maven unit-testing maven-profiles system-variable

我需要能够使用在 JUnit 测试运行时激活的配置文件。
我想知道是否有任何方法可以做类似的事情:

String str = System.getProperty("activated.profile[0]");

或任何其他相对方式...

我意识到有一个选项可以使用 ${project.profiles[0].id}但不知何故它不起作用。

有任何想法吗?

最佳答案

当使用 surefire 运行单元测试时,它通常会产生一个新的 JVM 来运行测试,我们必须将信息传递给新的 JVM。这通常可以使用“systemPropertyVariables”标签来完成。

我能够使用快速入门 Java 项目来练习这个,我将它添加到 POM 中:

我声明了以下配置文件

<profiles>
    <profile>
        <id>special-profile1</id>
    </profile>
    <profile>
        <id>special-profile2</id>
    </profile>
</profiles>     

这是万无一失的配置:
<build>
    <plugins>
        ...
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
           <version>2.19</version>
           <configuration>
               <systemPropertyVariables>
                   <profileId>${project.activeProfiles[0].id}</profileId>
               </systemPropertyVariables>
           </configuration>
        </plugin>
        ...
    </plugins>
</build>  

在我的单元测试中,我添加了以下内容:
/**
 * Rigourous Test :-)
 */
public void testApp()
{
    System.out.println("Profile ID:  " + System.getProperty("profileId"));
}

在没有配置文件的情况下调用“测试”命令时(即使用 mvn test ),我得到了这个:

-------------------------------------------------- -----
测试结果
-------------------------------------------------- -----
运行 com.fxs.AppTest
配置文件 ID:开发
测试运行:1,失败:0,错误:0,跳过:0,耗时:0.003 秒 - 在 com.fxs.AppTest

结果 :

测试运行:1,失败:0,错误:0,跳过:0

我们使用了 mvn -P special-profile2 test , 我懂了

-------------------------------------------------- -----
测试结果
-------------------------------------------------- -----
运行 com.fxs.AppTest
个人资料 ID:special-profile2
测试运行:1,失败:0,错误:0,跳过:0,耗时:0.002 秒 - 在 com.fxs.AppTest

结果 :

测试运行:1,失败:0,错误:0,跳过:0

这将传递第一个 Activity 配置文件的名称。如果我们可能有多个 Activity 配置文件,那么我们可能需要使用更多的系统属性。

注意:我使用 Maven 3.1.1 对此进行了测试

关于java - 在 maven java 项目运行时获取激活的配置文件名称列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34547962/

相关文章:

java - hibernate中的自引用实体会导致StackOverflowErrors

eclipse - 安装 m2e-egit 后发现 Eclipse IDE (Mars) 中缺少 Maven

java - Maven - 来自 java 项目的可执行文件

javascript - Jest- JSDOM 在实例化 JSDOM 时将 HTML 传递给 Jest 中的 JSDOM 构造函数

java - 更改矩形二维数组中的值

java - 如果 JTable 包含阿拉伯字符,如何强制它不反转文本?

java - 无法从 Java 文本文件中读取信息并对其进行排序

java - 在 Spring Boot HTML 页面中显示 Maven 项目构建属性

wcf - "Fast"WCF服务的集成测试

python - 如何正确使用单元测试的 assertRaises() 和 NoneType 对象?