JUnitテストの実行時にアクティブ化されたプロファイルを使用できる必要があります。私は次のようなことをする方法があるかどうか疑問に思いました:
String str = System.getProperty("activated.profile[0]");
または他の相対的な方法...
${project.profiles[0].id}
buを使用するオプションがあることに気づきました。どういうわけかそれは機能していません。
何か案は?
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
を使用して)「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
これにより、最初のアクティブなプロファイルの名前が渡されます。潜在的に複数のアクティブなプロファイルがある場合は、おそらくより多くのシステムプロパティを使用する必要があります。
注:Maven3.1.1を使用してこれをテストしました
次にpomファイルで使用した他のケース:
<profiles>
<profile>
<id>a-profile-id</id>
<properties>
<flag>a-flag-value</flag>
</properties>
</profile>
</profiles>
およびJavaの場合:
String flagValue = System.getenv("flag");