このセクションでは、単体テスト アシスタントを設定する方法を説明します。
このセクションの内容
全般的なオプションの設定
UTA の全般的なオプションを設定するには、[Parasoft] メニューの [設定] > [単体テスト アシスタント] をクリックします。
テスト ソース フォルダー
UTA で作成したテストを保存する場所のルート ディレクトリを指定します。デフォルトでは、[プロジェクト設定に基づく] オプションがオンであり、プロジェクトの設定を読み取ってテストを保存する場所を決定します。プロジェクトにテストの場所が指定されていない場合、プロジェクトの設定を更新してテスト ソース フォルダーを指定するか、いずれかの事前定義済みパターンに切り替えるか、以下の変数を使用して手動でパターンを作成します。
${project_name}
- テスト対象クラスを含むプロジェクト (Intelli の場合はモジュール) の名前${source_folder}
- プロジェクトのソース ファイルを含むフォルダーの名前
テスト クラス名のパターン
このオプションを使用すると、テストのパッケージおよびクラス名のパターンを指定できます。デフォルトのパターンは "${package_name}.${class_name}${test_kind}Test" であり、テストをテスト対象クラスと同じパッケージに含め、クラス名に "${test_kind}Test" という接尾辞を付加します。以下の変数を使用してカスタム パターンを指定することもできます。
${class_name}
- テスト対象クラスの名前${package_name}
- テスト対象クラスを含むパッケージの名前${test_kind}
- テスト タイプの名前。これはファイル名に追加されます。この変数は次の値を取ることができます:
- Spring
- Spring テストを JUnit 4 および 5 の他のテストと区別します。
- Parameterized
- パラメータライズド テストを JUnit 4 の通常のテストと区別します。JUnit 5 では、通常のテスト ケースとパラメータライズされたテスト ケースが同じファイルに追加されます。
Spring テストまたはパラメータライズド テスト以外のテストでは、${test_kind}
変数は空文字に解決されます。
新規テストのテスト フレームワーク
UTA が新規テストの作成に使用するテスト フレームワークを指定します。JUnit 4 または JUnit 5 を選択できます。
テスト作成オプション
private メソッドのテストを作成
private メソッドの単体テストを作成します。このオプションがオンの場合:
- エディターで private メソッドを選択したとき、単体テスト アシスタント ビューに private メソッドの単体テストを作成するためのアクション リンクが表示されます (「private メソッドに対するテストの作成」を参照)。
- [テスト スイートの作成] オプションを使用して単一のクラスのテストを作成している場合、ダイアログで private メソッドを選択できます (「1 つのファイルに対してテスト スイートを作成」を参照)。
- [テスト スイートの作成] オプションを使用して複数のクラスのテストを作成している場合、自動的に private メソッドのテストが作成されます (「複数のファイルに対してテスト スイートを作成」を参照)。
テストにタイムアウトを設定 (ミリ秒)
[テスト スイートの作成] オプションで作成されたテスト スイートの実行の制限時間をミリ秒単位で指定します。制限時間を超過した場合、テスト実行が中止され、テスト スイートは失敗します。また、エラー情報が UTA インターフェイスの推奨事項として表示されます。「テスト スイートの作成」を参照してください。
サンプル アサーションの生成
このオプションがオンの場合、UTA は基本的なテスト ケースを作成する際、コードのコメントとして自動的にアサーション テンプレートを生成します。詳細は「基本的な単体テストの作成」を参照してください。
カバレッジを増加させるテスト ケースだけを追加する
このオプションがオンの場合、カバレッジを増加させるテスト ケースだけが一括作成時に追加されます (「複数のファイルに対してテスト スイートを作成」を参照)。
ファクトリ メソッド オプション
タグ付けされたファクトリ メソッドを自動的に発見
このオプションが有効な場合、UTA は以下を実行します。
- IDE 起動時にすべてのプロジェクトをスキャンしてファクトリ メソッドを探します。
- プロジェクトが変更されたとき (たとえば Java ファイルまたはプロジェクトを作成または削除したとき)、ファクトリ メソッドの更新を検索します。
詳細については「ファクトリ メソッドの設定」を参照してください。
パラメータライズド テスト
作成アクションの有効化
このオプションがオンの場合、UTA はパラメータライズド テスト ケースを作成するためのアクション リンクを表示します。「パラメータライズされた単体テストの作成」を参照してください。
パラメータライズド テストは、[新規テストのテスト フレームワーク] オプションで設定したテスト フレームワークに依存します。
- JUnit 5 の場合、[Unit 5 Parameterized] が自動的にオンになります。
- JUnit 4 の場合、パラメータライズド テスト ケースの作成に使用するフレームワークを選択してください。
詳細設定
パラメータライズド テスト ケース作成のための入力データを設定します。
1 つのテスト ケースに対して作成されるパラメーター セットの最大数
1 つのテスト ケースに対して作成されるパラメーター バリアントの最大行数を指定します。
テスト データの生成先
テスト ケースが保存される場所を指定します。ドロップダウン メニューから [コード] または [CSV] を選択します。
パラメータライズ値
[タイプの選択] ドロップダウン メニューからデータ タイプを選択し、リストの値を追加、編集、削除することで、デフォルトの値のリストをカスタマイズできます。[検索] フィールドを使用すると、特定の値をすばやく検索できます。
Spring フレームワーク テスト
作成アクションの有効化
このオプションがオンの場合、UTA は Spring テスト ケースを作成するためのアクション リンクを表示します。「Spring 単体テストの作成」を参照してください。
デフォルトの ContextConfiguration 属性
Spring テスト作成時に ContextConfiguration アノテーションに含める属性を指定します。「ContextConfiguration アノテーションによる Spring テストの設定」を参照してください。
実行モニター オプションの設定
UTA 実行モニター オプションを設定すると、テスト実行時のデータ収集の制限値を指定できます。さらに、制限を超過するのを防ぐため、UTA によるテスト実行時にモニターから除外するパッケージやクラスを指定できます。
UTA のモック オプションを設定するには、[Parasoft] メニューの [設定] > [単体テスト アシスタント] > [実行モニター] をクリックします。
除外するパッケージおよびクラス
モニターから除外するパッケージおよびクラスのリストを指定します。[新規] をクリックし、パッケージまたはクラスの修飾名を指定します (ワイルド カードはサポートされていません)。
実行フロー データ収集の制限
これらのオプションを設定すると、実行時のデータ収集の制限値を指定できます。
- メソッド呼び出しの最大の深さ - 解析中のメソッド呼び出しの最大の深さを指定します。
- 単一のメソッドからのメソッド呼び出し最大回数 - 単一のメソッドからのサブメソッド呼び出しの最大回数を指定します。
- メソッド呼び出し合計回数 - 解析中のメソッド呼び出し合計回数の最大値を指定します。
モック オプションの設定
UTA のモック オプションを設定するには、[Parasoft] メニューの [設定] > [単体テスト アシスタント] > [モック] をクリックします。
有効化
テストの作成および実行時にオブジェクトのモックを有効または無効にします。
モックにヘルパー メソッドを使用
ヘルパー メソッドの使用を有効または無効にします。このオプションが有効な場合、生成されるテスト クラスは、通常のテスト メソッドとオブジェクトを準備するがアサーションを作成しないヘルパー メソッドを分離します。
静的メソッドおよびコンストラクターのモックを有効化 (Mockito inline 3.5 以降が必要)
情報
バージョン 2022.1 以降、static メソッドおよびコンストラクターのモックは Mockito で作成されます。この機能を利用するには、プロジェクトを更新して static メソッドおよびコンストラクターをサポートするバージョンの Mockito をインクルードする必要があります。手動で作成したモックについて Powermock with Mockito を引き続き利用したい場合、Mockito バージョン 3.12.4 を使用することを推奨します。Jtest 2022.1 より前のバージョンまたは手動で作成され、PowerMock を使用するテストは、テストが失敗しないよう更新する必要があります。詳細は「PowerMock with mockito-inline の実行でテストが失敗する場合」を参照してください。
UTA はテーブルで指定されたパターンに一致するメソッドを自動的にモック化します。新しいメソッドまたはパターンを追加するには、[新規] をクリックします。パターンの比較には修飾されたメソッド名およびワイルドカード (*) を使用します。.*
または <init>
で終わるパターンはコンストラクターに一致します。たとえば、次の設定は以下をモックします。
- 名前の末尾が "Service" であるすべてのクラスのすべてのコンストラクター
- "com.example" に含まれるすべてのサブパッケージ内のすべての
DAO
クラスのすべての静的メソッドおよびコンストラクター InternalUtil
クラスのすべてのメソッド
指定されたパターンがクラスのすべてのメソッドに一致する場合、UTA は mockStatic()
メソッドを使用してクラスの静的メソッドをモックします。mockStatic() メソッドの詳細については、「mockStatic」を参照してください。
テーブルで指定された static メソッドおよびコンストラクターだけがモックされます。UTA はテスト作成時に自動的にモックをテスト テンプレートに追加するか、テスト実行後にモックを追加するのに役立つ推奨事項を表示します (「モックの作成」を参照)。
推奨事項の設定
テスト実行後に UTA が表示する推奨事項のタイプを指定します。
UTA の推奨事項を設定するには、[Parasoft] メニューの [設定] > [推奨事項] をクリックします。
以下のタイプの推奨事項を有効または無効にできます。
- 他のスレッド - テストの状態に影響を与える可能性があるサイド スレッドを検出します。
- アクセスできないフィールドのアサーション - 実行中に変更されたアクセスできないフィールドを検出し、アサーション テンプレートを生成します。
- ファイルが作成されました - テスト実行中に作成されたが、実行後に削除されていないファイルを検出します。
- モック可能な呼び出し - テストを適切に分離するために変更可能なモック オブジェクトへの呼び出しを検出します。
- モック可能な静的呼び出し - モックするよう設定されている静的メソッドの呼び出しを検出します (「モック オプションの設定」を参照)。
- アサーションなし - アサーションが行われていないケースを検出します。
- 静的なフィールドの変更 - テスト実行中に静的フィールドが変更されたケースを検出します。
- システム プロパティの変更 - テスト実行中に変更されたが、実行後に復元されていないシステム プロパティを検出します。
- カバーされていないコード - カバーされていないコード ブロックを検出します。
UTA に表示される推奨事項のサンプルは、「単体テスト アシスタントを使用した単体テストの実行」を参照してください。
テスト テンプレートの設定
テスト テンプレートを使用すると、テスト クラスの構造を制御し、ユーザー固有のテストに必要な共通設定を指定できます。たとえば、セットアップ メソッドを追加したり、基底クラスから拡張したりできます。
テスト テンプレートが原因でコンパイル エラーが発生した場合、結果としてテストが生成されない可能性があります。生成されたファイルにエラーがあることを示すメッセージがコンソールに表示されます。
UTA テスト テンプレートを設定するには、[Parasoft] メニューの [設定] > [テスト テンプレート] をクリックします。
- 新規 - 新規テンプレートを作成し、編集用にテンプレートを開きます。自動で Parasoft のデフォルト テンプレートが用意されます。
- 編集 - 編集用にテンプレートを開きます。
- 削除 - テンプレートを削除します。アクティブなテンプレートまたは最後の 1 つのテンプレートを削除しようとした場合、エラーが表示されます。
- アクティブとしてマーク - クイック追加アクション (一括作成ではない) で使用されるテンプレートを指定します。
テンプレートの編集
[テンプレートの編集] ダイアログでは、テンプレートの作成/編集を行うことができます。
[テンプレートの編集] ダイアログでは、以下を設定する必要があります。
- テンプレート名: - テンプレートの固有の名前です。
- クラス テンプレート - テンプレートのクラス セクションのソース コードです。テンプレートのエラーをチェックするため、入力時に基本的な検証が行われます。
- 変数の形式が誤っているか、変数が認識されていない場合、エラー メッセージ (「不明または無効な変数」) が表示されます。
- テンプレートが基本的な構文チェックに適合しない場合、エラーが表示されます。
以下の変数が認識されます。
${className}
- テスト対象クラスの修飾されていない名前です。例:MyClass
${qualifiedClassName}
- テスト対象クラスの完全修飾名です。例:com.company.MyClass
${author}
- DTP 設定で指定されたユーザー名です。${testClassName}
- 作成されるテストの修飾されていない名前です。例:MyClassTest
名前は テスト クラス名のパターンから生成され、テンプレートで編集するべきではありません。テスト クラス名を更新する標準的な方法は、テスト ソース フォルダーを更新することです。
次のサンプルは、共通クラス設定の実装を示しています。
共通基底クラス拡張:
import com.company.BaseTestClass; public class ${testClassName} extends BaseTestClass { }
静的モックのためのセットアップ/ティアダウン メソッドを追加:
import org.junit.jupiter.api.*; import static org.mockito.Mockito.*; import java.util.*; public class ${testClassName} { Set<ScopedMock> staticMocks = new HashSet<>(); @BeforeEach public void setup() { var mocked = mockStatic(MyUtilClass.class); staticMocks.add(mocked); mockUtil.when(MyUtilClass::getUserName).thenReturn("testUser"); } @AfterEach public void teardown() { staticMocks.forEach(i -> i.close()); staticMocks.clear(); } }
- メソッド テンプレート - 新規テスト メソッドのソース コードです。テンプレートのエラーをチェックするため、入力時に基本的な検証が行われます。
- 変数の形式が誤っているか、変数が認識されていない場合、または必須の変数が欠けている場合、エラー メッセージ (「不明または無効な変数」または「メソッドに不足している必須変数」) が表示されます。
- テンプレートが基本的な構文チェックに適合しない場合、エラーが表示されます。
以下の変数が認識されます。
${methodSignature}
- パラメーターの型を含むテスト対象メソッド名です。例:calc(int, int, String)
${qualifiedMethodSignature}
- パラメーターの型を含むテスト対象メソッドの完全修飾名です。例:com.company.MyClass#calc(int, int, String)
この変数は、Javadoc の@see タグで使用すると便利です。${author}
- DTP 設定で指定されたユーザー名です。${testAnnotations}
(必須) - テスト メソッドに追加される自動生成アノテーションのプレースホルダーです。たとえば、JUnit テストには @Test アノテーションが必要です。この変数の前または後ろにカスタム アノテーションを追加できます。${testName}
(必須) - テスト メソッドの自動生成される名前です。${testBody}
(必須) - テストの本文を構成する自動生成ステートメントのプレースホルダーです。生成されるすべてのテストに含めるカスタム コードをこの変数の前または後ろに追加できます。
- 追加のコードは、テスト メソッドの外にも追加できますが、重複につながるため、推奨されません。たとえば、メソッド テンプレートにフィールド "int foo = 0;" を追加すると、テストごとにこのフィールドが追加され、名前が重複します。そのため、追加される要素の名前に
${testName}
変数を含めるか、クラス テンプレートにコードを追加することが推奨されます。
次のサンプルは、フィールドを定義して設定するクラスおよびメソッド テンプレートを示しています。
クラス テンプレート
public class ${testClassName} { private CustomField customField = null; }
メソッド テンプレート
${testAnnotations} public void ${testName}() throws Exception { customField = new CustomField(42, "Testing example"); customField.init(); ${testBody} }