テスト設定メソッドの使用
テスト設定メソッド (@testSetup アノテーションが付加されたメソッド) を使用して、テストレコードを 1 回作成し、テストクラスの各テストメソッドでそれらのレコードにアクセスできます。テスト設定メソッドを使用すると、すべてのテストメソッドに対する参照または前提データや、すべてのテストメソッドの操作対象となる共通のレコードセットを作成する必要がある場合に時間を節約できます。
テスト設定メソッドによりテスト実行時間を短縮できます。特に多くのレコードを処理する場合に効果があります。また、共通のテストデータを容易かつ効率的に作成できます。クラスに対して 1 回レコードを設定すれば、テストメソッドごとにレコードを再作成する必要はありません。また、テスト設定中に作成されたレコードのロールバックは、クラス全体の実行終了時に行われるため、ロールバックされるレコードの数も削減されます。その結果、テストメソッドごとにこうしたレコードを作成してロールバックする場合に比べ、システムリソースの使用効率が向上します。
テストクラスにテスト設定メソッドが含まれる場合、テストフレームワークは、テスト設定メソッドを最初に実行してから、そのクラスの他のテストメソッドを実行します。テスト設定メソッドで作成されたレコードは、テストクラス内のすべてのテストメソッドで使用でき、テストクラス実行終了時にロールバックされます。レコード項目の更新やレコード削除など、テストメソッドがこれらのレコードを変更した場合、その変更は、各テストメソッドの実行終了後にロールバックされます。次に実行されるテストメソッドは、元の変更されていない状態のレコードにアクセスできます。
例
次の例では、テストレコードを 1 回作成してから、複数のテストメソッドでそれらのレコードにアクセスする方法を示します。また、この例では、最初のテストメソッドで加えられた変更がロールバックされて 2 つ目のテストメソッドでは使用できないことも示します。
テスト設定メソッドの考慮事項
- テスト設定メソッドは、テストクラスのデフォルトのデータ分離モードでのみサポートされます。テストクラスまたはテストメソッドが @isTest(SeeAllData=true) アノテーションを使用することで組織データにアクセスできる場合、そのクラスではテスト設定メソッドはサポートされません。テストのためのデータ分離を使用できるのは API バージョン 24.0 以降であるため、テスト設定メソッドを使用できるのもこれらのバージョンのみです。
- テストクラスごとに使用できるテスト設定メソッドは 1 つのみです。
- テスト設定メソッドの実行中に致命的なエラーが発生した場合 (DML 操作またはアサーションの失敗によって発生した例外など)、テストクラス全体が失敗し、クラス内でそれ以降のテストは実行されません。
- テスト設定メソッドが、別のクラスの非テストメソッドをコールする場合、その非テストメソッドのコードカバー率は計算されません。