テストデータ作成用の共通テストユーティリティクラス
共通テストユーティリティクラスは、テストデータ作成用に再利用可能なコードを含む公開テストクラスです。
公開テストユーティリティクラスは、IsTest アノテーションを指定して定義されているため、組織のコードサイズ制限は適用されず、テストコンテキストで実行されます。これらのクラスはテストメソッドからコールできますが、テスト以外のコードではコールできません。
公開テストユーティリティクラスのメソッドは、メソッドがテスト以外のクラス内にある場合と同様に定義されます。パラメーターを取り、値を返すことができます。このメソッドは他のテストクラスから参照できるように public または global として宣言する必要があります。これらの共通メソッドは Apex クラスのテストメソッドからコールし、テスト実行前にテストデータを設定できます。通常の Apex クラスではテストデータを作成するための公開メソッドを作成できますが、IsTest アノテーションを指定しない場合は、組織のコードサイズ制限の適用からこのコードを除外することはできません。
次は、テストユーティリティクラスの例です。1 つのメソッド createTestRecords が含まれています。このメソッドでは、作成する取引先数および取引先あたりの取引先責任者数を受け入れます。次の例では、データを作成するためにこのメソッドをコールするテストメソッドを示します。
1@IsTest
2public class TestDataFactory {
3 public static void createTestRecords(Integer numAccts, Integer numContactsPerAcct) {
4 List<Account> accts = new List<Account>();
5
6 for(Integer i=0;i<numAccts;i++) {
7 Account a = new Account(Name='TestAccount' + i);
8 accts.add(a);
9 }
10 insert accts;
11
12 List<Contact> cons = new List<Contact>();
13 for (Integer j=0;j<numAccts;j++) {
14 Account acct = accts[j];
15 // For each account just inserted, add contacts
16 for (Integer k=numContactsPerAcct*j;k<numContactsPerAcct*(j+1);k++) {
17 cons.add(new Contact(firstname='Test'+k,
18 lastname='Test'+k,
19 AccountId=acct.Id));
20 }
21 }
22 // Insert all contacts for all accounts
23 insert cons;
24 }
25}このクラスのテストメソッドでは、それぞれ 3 つの取引先責任者を含む 5 つのテスト取引先を作成するテストユーティリティメソッド createTestRecords をコールします。
1@IsTest
2private class MyTestClass {
3 static testmethod void test1() {
4 TestDataFactory.createTestRecords(5,3);
5 // Run some tests
6 }
7}