はじめに

UTA はテスト生成時にコード内のファクトリ メソッドを使用してオブジェクトを作成できます。それには、Javadoc で個々のメソッドをファクトリ メソッドとしてタグ付けし (「Tagging a Factory Method」を参照)、テスト作成時に UTA がメソッドを発見してオブジェクトの初期化に利用できるようにする必要があります。

タグ付けしたファクトリ メソッドを自動的に検索するよう UTA を設定することも、手動でプロジェクトからメソッドを検索するよう指定することもできます (「Scanning for Factory Methods」を参照)。

ファクトリ メソッドのタグ付け

内部クラスではない public クラスの public static メソッドをファクトリ メソッドとしてタグ付けできます。メソッドは制約のある型パラメーターを含まない複合型を返す必要があります。以下のいずれかの方法でメソッドをタグ付けします。

  • メソッドの Javadoc コメントに手動で @jtest.factory タグを付加する
  • エディターでメソッドを選択し、単体テスト アシスタント インターフェイスの [ファクトリ メソッドにタグ付け] アクションを使用する。アクションを実行すると、選択されたメソッドの Javadoc コメントに自動的に @jtest.factory タグが付加され、ファクトリ メソッド ビューにタグ付けされたメソッドが表示されます。

    Eclipse

    IntelliJ

次のサンプルでは、createMyObject メソッドがタグ付けされています。

public class MyObjectFactory {
    /**
     * @jtest.factory
     */
    public static MyObject createMyObject(int param) {
        return new MyObject(param);
    }
}

メソッドがタグ付けされていない場合、UTA はテスト作成時にこのメソッドを使用せず、myObject は null で初期化されます。

@Test
public void testMyMethodUnderTest() throws Throwable {
    // When
    MyObject myObject = null;
    String results = myMethodUnderTest(myObject);

    // Then
    // assertEquals("", results);
}

メソッドがタグ付けされている場合、UTA はこのメソッドを使用してテスト時にオブジェクトを作成するため、テスト コードは次のようになります。

@Test
public void testMyMethodUnderTest() throws Throwable {
    // When
    int param = 0;
    MyObject myObject = MyObjectFactory.createMyObject(param);
    String results = myMethodUnderTest(myObject);

    // Then
    // assertEquals("", results);
}

タグ付けされたファクトリ メソッドは、それを使用するテストと同じプロジェクトになければなりません。

別のプロジェクトでタグ付けされたファクトリ メソッドを使用するには、テストが生成されるプロジェクトに新規メソッドを追加し、それをファクトリ メソッドとしてタグ付けしてから、使用する外部のファクトリ メソッドを指すよう指定します。

public class TestUtil {
    /**
     * @jtest.factory
    */
    public static MyObject createMyObject() {
        return MyObjectFactory.createMyObject(3);
    }
}

ファクトリ メソッドのタグ削除

Javadoc から @jtest.factory タグを削除するには、以下のいずれかの操作を行います。

  • Javadoc から手動でタグを削除する。
  • タグ付けされたメソッドをエディターで選択し、単体テスト アシスタント インターフェイスの [ファクトリ メソッドのタグを削除] アクションを使用します。アクションを実行すると、Javadoc が自動的に更新され、ファクトリ メソッド ビューからメソッドが削除されます。

           
  • ファクトリ メソッド ビューでメソッドを右クリックし、[ファクトリ メソッドのタグを削除] オプションをクリックします。アクションを実行すると、Javadoc が自動的に更新され、ファクトリ メソッド ビューからメソッドが削除されます。


    1 つまたはそれ以上のクラス、またはプロジェクトを選択し、[ファクトリ メソッドのタグを削除] オプションをクリックすると、選択範囲内のすべての @jtest.factory タグが削除されます。

ファクトリ メソッドのスキャン

すべてのプロジェクトを自動的にスキャンし、タグ付けされたファクトリ メソッドを検索するよう UTA を設定するには、[タグ付けされたファクトリ メソッドを自動的に発見] オプションをオンにします。「設定の構成」を参照してください。このオプションをオンにすると、UTA はIDE 起動時にプロジェクトをスキャンし、見つかったファクトリ メソッドをファクトリ メソッド ビューに表示します。

プロジェクトが変更されると (たとえば Java ファイルを作成または保存したとき、新規プロジェクトを作成したりプロジェクトを削除したときなど)、ファクトリ メソッド ビューが自動的に更新されます。

また、コードをスキャンしてタグ付けされたファクトリ メソッドを探すよう、手動で UTA に指示することもできます。

  1. ファクトリ メソッド ビューがまだ開かれていない場合、IDE のメニューバーで [Parasoft] > [ビューの表示] > [ファクトリ メソッド] をクリックします。

  2. パッケージ エクスプローラーでプロジェクトを選択します。

    UTA はプロジェクト エクスプローラーまたはナビゲーターで選択されたプロジェクトをスキャンしません。

  3. ファクトリ メソッド メニューの [ワークスペースのスキャン] または [選択されたプロジェクトのスキャン] をクリックして、特定のプロジェクトまたはワークスペース全体からファクトリ メソッドを検索します。


ファクトリ メソッドの使用

UTA によって発見され、ファクトリ メソッド ビューに表示されたファクトリ メソッドは、以下のいずれかのオプションを実行したとき、自動的にテスト生成に使用されます。

  • 単体テスト アシスタント ビューの [ファクトリ メソッドを使用してインスタンス化]: 選択された型に対して利用可能なファクトリ メソッドがある場合、このアクションが表示されます。
  • 初期化を必要とする型の適切なファクトリ メソッドが利用可能な場合、単体テスト アシスタント ビューまたはコンテキスト メニュー (「複数の単体テストの作成」を参照) の [テスト ケースの追加]:  型に対して複数のファクトリ メソッドがある場合、UTA は戻り値の型が初期化対象の型と最も近いものを優先します。  また、同じパッケージまたは最も近い親のパッケージ内にあるメソッドも優先されます。


  • No labels