Newer Version Available
テスト設定メソッドの使用
テスト設定メソッド (@testSetup アノテーションが付加されたメソッド) を使用して、テストレコードを 1 回作成し、テストクラスの各テストメソッドでそれらのレコードにアクセスできます。テスト設定メソッドを使用すると、すべてのテストメソッドに対する参照または前提データや、すべてのテストメソッドの操作対象となる共通のレコードセットを作成する必要がある場合に時間を節約できます。
テスト設定メソッドによりテスト実行時間を短縮できます。特に多くのレコードを処理する場合に効果があります。また、共通のテストデータを容易かつ効率的に作成できます。クラスに対して 1 回レコードを設定すれば、テストメソッドごとにレコードを再作成する必要はありません。また、テスト設定中に作成されたレコードのロールバックは、クラス全体の実行終了時に行われるため、ロールバックされるレコードの数も削減されます。その結果、テストメソッドごとにこうしたレコードを作成してロールバックする場合に比べ、システムリソースの使用効率が向上します。
テストクラスにテスト設定メソッドが含まれる場合、テストフレームワークは、テスト設定メソッドを最初に実行してから、そのクラスの他のテストメソッドを実行します。テスト設定メソッドで作成されたレコードは、テストクラス内のすべてのテストメソッドで使用でき、テストクラス実行終了時にロールバックされます。レコード項目の更新やレコード削除など、テストメソッドがこれらのレコードを変更した場合、その変更は、各テストメソッドの実行終了後にロールバックされます。次に実行されるテストメソッドは、元の変更されていない状態のレコードにアクセスできます。
構文
テスト設定メソッドは、テストクラスで定義され、引数を取らず、値を返しません。テスト設定メソッドの構文は次のとおりです。
1@testSetup static void methodName() {
2
3}例
次の例では、テストレコードを 1 回作成してから、複数のテストメソッドでそれらのレコードにアクセスする方法を示します。また、この例では、最初のテストメソッドで加えられた変更がロールバックされて 2 つ目のテストメソッドでは使用できないことも示します。
1@isTest
2private class CommonTestSetup {
3
4 @testSetup static void setup() {
5 // Create common test accounts
6 List<Account> testAccts = new List<Account>();
7 for(Integer i=0;i<2;i++) {
8 testAccts.add(new Account(Name = 'TestAcct'+i));
9 }
10 insert testAccts;
11 }
12
13 @isTest static void testMethod1() {
14 // Get the first test account by using a SOQL query
15 Account acct = [SELECT Id FROM Account WHERE Name='TestAcct0' LIMIT 1];
16 // Modify first account
17 acct.Phone = '555-1212';
18 // This update is local to this test method only.
19 update acct;
20
21 // Delete second account
22 Account acct2 = [SELECT Id FROM Account WHERE Name='TestAcct1' LIMIT 1];
23 // This deletion is local to this test method only.
24 delete acct2;
25
26 // Perform some testing
27 }
28
29 @isTest static void testMethod2() {
30 // The changes made by testMethod1() are rolled back and
31 // are not visible to this test method.
32 // Get the first account by using a SOQL query
33 Account acct = [SELECT Phone FROM Account WHERE Name='TestAcct0' LIMIT 1];
34 // Verify that test account created by test setup method is unaltered.
35 System.assertEquals(null, acct.Phone);
36
37 // Get the second account by using a SOQL query
38 Account acct2 = [SELECT Id FROM Account WHERE Name='TestAcct1' LIMIT 1];
39 // Verify test account created by test setup method is unaltered.
40 System.assertNotEquals(null, acct2);
41
42 // Perform some testing
43 }
44
45}テスト設定メソッドの考慮事項
- テスト設定メソッドは、テストクラスのデフォルトのデータ分離モードでのみサポートされます。テストクラスまたはテストメソッドが @isTest(SeeAllData=true) アノテーションを使用することで組織データにアクセスできる場合、そのクラスではテスト設定メソッドはサポートされません。テストのためのデータ分離を使用できるのは API バージョン 24.0 以降であるため、テスト設定メソッドを使用できるのもこれらのバージョンのみです。
- テストクラスごとに使用できるテスト設定メソッドは 1 つのみです。
- テスト設定メソッドの実行中に致命的なエラーが発生した場合 (DML 操作またはアサーションの失敗によって発生した例外など)、テストクラス全体が失敗し、クラス内でそれ以降のテストは実行されません。
- テスト設定メソッドが、別のクラスの非テストメソッドをコールする場合、その非テストメソッドのコードカバー率は計算されません。