15

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

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

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

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

有任何想法吗?

4

2 回答 2

18

当使用 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

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

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

于 2015-12-31T20:54:10.993 回答
-2

我在 pom 文件中使用的其他情况:

<profiles>
    <profile>
        <id>a-profile-id</id>

        <properties>
            <flag>a-flag-value</flag>
        </properties>
    </profile>
</profiles>

在java中:

String flagValue = System.getenv("flag");
于 2019-09-25T06:21:33.090 回答