15

JUnit テストの実行時にアクティブ化されたプロファイルを使用できるようにする必要があります。次のような方法があるかどうか疑問に思っていました。

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

または他の相対的な方法...

${project.profiles[0].id}何とか buを使用するオプションがあることに気付きましたが、機能していません。

何か案は?

4

2 に答える 2

18

Surefire を使用して単体テストを実行する場合、通常、テストを実行するために新しい JVM が生成されるため、新しい JVM に情報を渡す必要があります。これは通常、「systemPropertyVariables」タグを使用して実行できます。

私はこれを POM に追加したクイックスタート Java プロジェクトを使用してこれを実行することができました。

次のプロファイルを宣言しました

<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

これにより、最初のアクティブなプロファイルの名前が渡されます。複数のアクティブなプロファイルがある可能性がある場合は、おそらくより多くのシステム プロパティを使用する必要があります。

注: Maven 3.1.1 を使用してこれをテストしました

于 2015-12-31T20:54:10.993 に答える