この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

テスト設定メソッドの使用

テスト設定メソッド (@testSetup アノテーションが付加されたメソッド) を使用して、テストレコードを 1 回作成し、テストクラスの各テストメソッドでそれらのレコードにアクセスできます。テスト設定メソッドを使用すると、すべてのテストメソッドに対する参照または前提データや、すべてのテストメソッドの操作対象となる共通のレコードセットを作成する必要がある場合に時間を節約できます。

テスト設定メソッドによりテスト実行時間を短縮できます。特に多くのレコードを処理する場合に効果があります。また、共通のテストデータを容易かつ効率的に作成できます。クラスに対して 1 回レコードを設定すれば、テストメソッドごとにレコードを再作成する必要はありません。また、テスト設定中に作成されたレコードのロールバックは、クラス全体の実行終了時に行われるため、ロールバックされるレコードの数も削減されます。その結果、テストメソッドごとにこうしたレコードを作成してロールバックする場合に比べ、システムリソースの使用効率が向上します。

テストクラスにテスト設定メソッドが含まれる場合、テストフレームワークは、テスト設定メソッドを最初に実行してから、そのクラスの他のテストメソッドを実行します。テスト設定メソッドで作成されたレコードは、テストクラス内のすべてのテストメソッドで使用でき、テストクラス実行終了時にロールバックされます。レコード項目の更新やレコード削除など、テストメソッドがこれらのレコードを変更した場合、その変更は、各テストメソッドの実行終了後にロールバックされます。次に実行されるテストメソッドは、元の変更されていない状態のレコードにアクセスできます。

構文

テスト設定メソッドは、テストクラスで定義され、引数を取らず、値を返しません。テスト設定メソッドの構文は次のとおりです。

1@testSetup static void methodName() {
2
3}

次の例では、テストレコードを 1 回作成してから、複数のテストメソッドでそれらのレコードにアクセスする方法を示します。また、この例では、最初のテストメソッドで加えられた変更がロールバックされて 2 つ目のテストメソッドでは使用できないことも示します。

1swfobject.registerObject("clippy.codeblock-1", "9");@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 操作またはアサーションの失敗によって発生した例外など)、テストクラス全体が失敗し、クラス内でそれ以降のテストは実行されません。
  • テスト設定メソッドが、別のクラスの非テストメソッドをコールする場合、その非テストメソッドのコードカバー率は計算されません。