このセクションの内容

はじめに

単体テスト アシスタントは、テストを依存対象から分離するためのモック オブジェクトの作成を容易にします。テストが生成されると、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 メソッドを追加します。これにより、追加されたアノテーションに基づいてテスト対象オブジェクトとその依存関係が初期化されます。すでにテスト クラスに @PowerMockRunner アノテーションが含まれている場合、setupMocks メソッドは追加されません。

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

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

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

静的メソッドのモック

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

  1. IDE メニューバーで [Parasoft] メニューの [設定] > [単体テスト アシスタント]をクリックします。
  2. 推奨事項セクションで [モック可能な静的呼び出し (PowerMock が必要)] オプションをオンにします (詳細は「モック オプションの設定」を参照)。
  3. [Parasoft] メニューの [設定] > [単体テスト アシスタント] > [モック] をクリックします。
  4. [有効化] チェック ボックスをオンにして、モックを使用する単体テストの作成を有効化します。
  5. [PowerMock with Mockito] フレームワークを選択します。
  6. [モック可能な静的呼び出し (PowerMock が必要)]] テーブルにモックする静的メソッドのリストを設定します。[新規] をクリックし、メソッドの修飾名またはワイルドカードを使用したパターンを指定します。UTA はこのテーブルで指定された静的メソッドだけをモックします。  
        

     
    または、テストを実行した後に静的メソッドをリストに追加することもできます (詳細は「単体テスト アシスタントを使用した単体テストの実行」を参照)。実行フロー内の静的メソッドを表すノードを右クリックし、[モック可能なメソッドのパターンを追加] オプションをクリックします。[静的メソッドのモック] オプションをオンにすると、選択されたメソッドの呼び出しをモックするようコードが変更されますが、メソッドはテーブルに追加されません。詳細については「単体テスト アシスタントを使用した単体テストの実行」を参照してください。


    テスト作成中に、テスト対象コード内で指定されたメソッドの呼び出しが検出された場合、生成されるテスト テンプレートにモックが追加されます (「基本的な単体テストの作成」を参照)。

  7. UTA を使用して単体テストを実行します (「単体テスト アシスタントを使用した単体テストの実行」を参照)。UTA は指定された静的メソッドの呼び出しを検出し、自動的にモックを作成できるよう推奨事項を表示します。
  8. [静的呼び出しのモック] アクション リンクをクリックします。

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



  • No labels