外部 ID の使用

外部 ID を使用すると、テスト パッケージ内のテスト ノードやスイート ノードを一意に識別できます。外部 ID は、各テスト ノードおよび各スイート ノードに対して 1 つのプロパティという形で提供されます。この自動的に生成される 外部 ID は、「~」が前に付いたクラスおよびメソッドの完全修飾名で、テスト メソッドを一意に識別します。

JUnit テストの場合、自動的に生成される 外部 ID では、~<package name>.<class name>#<method name> の形式が使用されます。

JUnit テスト クラスをリファクタリングする場合、外部 ID の自動生成は利用できません。これは、リファクタリング以前のテストの結果情報が、新しいテストを作成する際に失われてしまうためです。この場合、テストに対する 外部 ID は手動で定義する必要があります。リファクタリングされたメソッドを再度識別することは可能です。これは、JUnit テストが移動されたり、その名前が変更される間、外部 ID は変更されずそのままであるためです。外部 ID は、ソース コード内の注釈として手動で設定することが可能です。

以下のコード例は、JUnit テストのための注釈を表しています。

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface ExternalId {
  String externalId();
}

この注釈は、以下のように、JUnit テスト内でクラスおよびテスト メソッドに注釈を付けるために使用されます。

import static org.junit.Assert.*;        
import org.junit.Test;

import com.borland.runner.ExternalId;

@ExternalId(externalId="JUnit4test")
public class JUnit4test {
  
  @Test
  @ExternalId(externalId="MyExtId1")
  public void test1() {
    ...
  }
  
  @Test
  @ExternalId(externalId="MyExtId2")
  public void test2() {
    ...
  }
}

テスト メソッドに対して、JUnit ランナー「org.junit.runners.Parameterized」と共に 外部 ID を使用することは、サポートされていない点に注意してください。これは、1 つのメソッドを、異なるパラメータで繰り返し実行した場合、外部 ID が一意でなくなるためです。回避策としては、外部 ID をメソッド レベルでは省略し、クラス レベルで指定することができます。例は次のようになります。

@RunWith(Parameterized.class)
@ExternalId(externalId="parameterizedWithExtId")
public class TestCaseParameterizedWithExternalId {

  @Parameters
  public static Collection<Object[]> parameterFeeder() {
    return Arrays.asList(new Object[][] {
        { "param_name1", "param_value1" }, // set of parameters per run, type matching constructor must exist!
        { "param_name3", "param_value3" },
        { "param_name2", "param_value2" },
      }
    );
  }

  private String paramName;
  private String paramValue;
  
  public TestCaseParameterizedWithExternalId(String paramName, String paramValue) {
    this.paramName = paramName;
    this.paramValue = paramValue;
  }
  
  @Test
  public void testWithParams() {
    System.out.println(String.format("run with parameter: name='%s', value='%s'", paramName, paramValue));
  }
 
}
注: JUnit テスト用の 外部 ID の設定は、JUnit 4.4 以降を使用したテストに対してのみ可能です。