アノテーションインターフェース IfProfileValue


JUnit 4 で使用するテストアノテーションは、特定のテストプロファイルに対してテストが有効か無効かを示します。

このアノテーションのコンテキストでは、プロファイルという用語はデフォルトで Java システムプロパティを指します。ただし、セマンティクスは、カスタム ProfileValueSource を実装することで変更できます。構成された ProfileValueSource が、宣言された name() に一致する value() を返す場合、テストが有効になります。それ以外の場合、テストは無効になり、事実上無視されます。

@IfProfileValue は、クラスレベル、メソッドレベル、その両方で適用できます。@IfProfileValue のクラスレベルの使用箇所は、そのクラスまたはそのサブクラス内のメソッドのメソッドレベルの使用箇所よりも優先されます。具体的には、テストがクラスレベルメソッドレベルの両方で有効になっている場合に有効になります。@IfProfileValue がないということは、テストが暗黙的に有効になっていることを意味します。これは、@Ignore の存在が常にテストを無効にすることを除いて、JUnit の @Ignore アノテーションのセマンティクスに類似しています。

サンプル

SystemProfileValueSource を ProfileValueSource 実装(デフォルトで構成されている)として使用する場合、次のように Oracle の JavaVM でのみ実行するようにテストメソッドを構成できます。
 @IfProfileValue(name = "java.vendor", value = "Oracle Corporation")
 public void testSomething() {
     // ...
 }

'OR' セマンティクス

あるいは、複数の values()OR セマンティクスを使用して @IfProfileValue を構成することもできます。次のテストは、unit-tests  または integration-tests のいずれかの値で "test-groups" プロファイルに対して ProfileValueSource が適切に構成されている場合に有効になります。この機能は、TestNG のテストグループのサポートおよび JUnit のテストカテゴリの実験的サポートに似ています

 @IfProfileValue(name = "test-groups", values = { "unit-tests", "integration-tests" })
 public void testWhichRunsForUnitOrIntegrationTestGroups() {
     // ...
 }

@IfProfileValue 対 @Profile

@IfProfileValue アノテーションと @Profile アノテーションはどちらもプロファイルを含みますが、直接関連しているわけではありません。@Profile には、Environment で構成された Bean 定義プロファイルが含まれます。一方、@IfProfileValue は、テストを有効または無効にするために使用されます。

メタアノテーションサポート

このアノテーションは、カスタム構成アノテーションを作成するためのメタアノテーションとして使用することができます。

導入:
2.0
作成者:
Rod Johnson, Sam Brannen
関連事項:
  • 必須定数のサマリー

    必須要素
    修飾子と型
    必須要素
    説明
    テストするプロファイル値の name
  • オプション要素のサマリー

    オプション要素
    修飾子と型
    オプションの要素
    説明
    指定された name()プロファイル値の単一の許容される value
    指定された name()プロファイル値のすべての許容される values のリスト。
  • 要素の詳細

    • name

      StringSE name
      テストするプロファイル値の name
    • value

      StringSE value
      指定された name()プロファイル値の単一の許容される value

      メモ: #value と values() の両方に値を割り当てると、構成の競合が発生します。

      デフォルト:
      ""
    • values

      StringSE[] values
      指定された name()プロファイル値のすべての許容される values のリスト。

      メモ: value() と #values の両方に値を割り当てると、構成の競合が発生します。

      デフォルト:
      {}