このセクションの内容

はじめに

単体テスト アシスタントは、テストを依存対象から分離するためのモック オブジェクトの作成を容易にします。テストが生成されると、UTA は自動的にモックを作成します。モックは、テストには利用できない外部インターフェイスなど、実際の複雑なオブジェクトの振る舞いをシミュレートします。これによって、テストに余分なコードを追加することなく、個別にテストを実行できます。 

モックを使用する単体テストの作成

  1. モックの作成に関するオプションが設定済みであることを確認します (「モック オプションの設定」を参照)。
  2. UTA で新規単体テストを作成します (「基本的な単体テストの作成」、「テスト スイートの作成」または「パラメータライズされた単体テストの作成」を参照)。UTA はソース コードを解析し、利用できない複雑なオブジェクトを検出すると、テストにモック オブジェクトを追加します。



  3. UTA インターフェイスでテストを実行して結果を参照します (「単体テスト アシスタントを使用した単体テストの実行」を参照)。
        
    推奨事項ビューには、モックできる可能性があるメソッド呼び出しに関する情報が表示されます。

      
    [ハイライト] アイコンをクリックすると、左側の列に表示された実行フロー内でそれらの通信を参照できます。 
     

    茶色でマークされたノードが、モック オブジェクトを表します。太字のノードは、モック オブジェクトの呼び出しを表します。ノードをダブルクリックすると、テスト コードに移動します。

java.lang.Object クラスの以下のメソッドに対しては、UTA はモックを自動生成しません。

  • boolean equals(Object obj)
  • int hashCode()
  • Class<?> getClass()
  • String toString()

モックのカスタマイズ

UTA によって作成されたモックには、変更可能なデフォルト値が含まれています。 

  1. [モックする] アクション リンクをクリックしてテストを拡張し、モックの修正に必要な要素を追加します。
     

     
    (info) [モックする] アクションは、テスト メソッドまたはヘルパー メソッドで宣言されたローカル変数、および @Mock でアノテートされたフィールドに対して適用されます。
     
  2. テスト戦略に合う値でモックを修正します。
     

モック初期化の設定

デフォルトでは、UTA はテスト対象オブジェクトおよびその依存関係をテスト メソッド内で宣言して初期化することでモックを初期化します。  テスト ケースを一括で作成する場合、テスト対象オブジェクトに @InjectMocks アノテーションを使用し、オブジェクトのすべての依存関係に @Mock を使用して、テスト対象オブジェクトと依存関係をクラス レベルで初期化するよう指定できます。それには、[単体テスト アシスタント - テスト ケースの追加] ダイアログの [@InjectMocks の使用] オプションを有効にします (「テスト スイートの作成」を参照)。

このオプションが有効な場合、UTA は以下を実行します。

  1. @InjectMocks アノテーションを使用して、テスト対象オブジェクトをテストクラス レベルのフィールドとして宣言します。
  2. 以下の条件を満たすテスト対象オブジェクト (およびそのスーパークラス) のすべてのフィールドに対応するフィールドを追加し、@Mock アノテーションを指定します。
    - 複雑なオブジェクト、インターフェイス、または抽象クラスとして宣言されている。
    - テスト対象メソッドまたはテスト対象メソッドのサブコールで使用されている。
  3. @Before Junit アノテーションを使用して setupMocks メソッドを追加します。これにより、追加されたアノテーションに基づいてテスト対象オブジェクトとその依存関係が初期化されます。 

以下に対しては、@InjectMocks アノテーションはサポートされていません。

  • Spring インテグレーション テスト。これは、コンテナー/コンフィギュレーション モデルを使用してモックを初期化します。
  • 同じ型を持つ複数のフィールド。
  • コレクション、マップ、ファクトリ メソッドが存在する型、プリミティブ型など、一部の依存型。

@InjectMocks アノテーションは、Mockito 1.8.3 以降で利用可能です。詳細については https://www.javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/InjectMocks.html を参照してください。

静的メソッドのモック

すべてのモック可能な静的メソッドに対してモックを作成するよう UTA を設定できます。

  1. IDE メニューバーで [Parasoft] メニューの [設定] > [単体テスト アシスタント] > [モック] をクリックします。
  2. [有効化] チェック ボックスをオンにして、モックを使用する単体テストの作成を有効化します。
  3. [静的メソッドおよびコンストラクターのモックを有効化 (Mockito inline 3.5 以降が必要)] オプションをオンにします (詳細は「モック オプションの設定」を参照)。UTA は必要なすべてのモック可能な静的メソッドおよび/またはコンストラクターに対してモックを作成します。
    特定のメソッドおよび/またはコンストラクターをモックから除外するには、下の [静的モックから除外する静的メソッドおよびコンストラクター] テーブルにメソッドおよび/またはコンストラクターを追加します。[新規] をクリックし、メソッドの修飾名またはワイルドカードを使用したパターンを指定します。
    特定の除外されたメソッドおよび/またはコンストラクターをモックするには、[モックする静的メソッドおよびコンストラクター (除外パターンをオーバーライド)] テーブルにメソッドおよび/またはコンストラクターを追加します。[新規] をクリックし、メソッドの修飾名またはワイルドカードを使用したパターンを指定します。
    テスト作成時にテスト対象コード内で必要なモック可能な静的メソッドが検出されると、生成されるテストにモックが含まれます (「基本的な単体テストの作成」を参照)。
    テストを実行した後に静的メソッドのモックを作成することもできます (詳細については「単体テスト アシスタントを使用した単体テストの実行」を参照)。実行フロー内の静的メソッドを表すノードを右クリックし、[静的モックの有効化] オプションをクリックします。

    [静的メソッドのモック] オプションをオンにすると、選択されたメソッドの呼び出しをモックするようコードが変更されますが、メソッドは UTA 設定の [モックする静的メソッドおよびコンストラクター (除外パターンをオーバーライド)] テーブルに追加されません。詳細については「モック オプションの設定」および「単体テスト アシスタントを使用した単体テストの実行」を参照してください。

    モックからメソッドを除外し、推奨事項が表示されないようにするには、メニューの [静的モックから除外] オプションをクリックします。

    Mockito によってサポートされないケースの詳細については「Mockito による static およびコンストラクターのモックの制約」を参照してください。

  4. UTA を使用して単体テストを実行します (「単体テスト アシスタントを使用した単体テストの実行」を参照)。UTA は指定された静的メソッドの呼び出しを検出し、自動的にモックを作成できるよう推奨事項を表示します。
    推奨事項を表示するには、UTA の設定で [モック可能な静的呼び出し (静的モックの有効化が必要)] オプションが有効化されている必要があります。詳細については「推奨事項の設定」を参照してください。
  5. [静的呼び出しのモック] アクション リンクをクリックします。

    指定された静的メソッドが mockStatic メソッドによってモックされます。

    モックからメソッドを除外し、推奨事項が表示されないようにするには、[静的モックから除外] アクション リンクをクリックします。


  • No labels