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

Apex 一括処理クラスのテストの追加

このレッスンでは、CleanUpRecords 一括処理クラスのテストクラスを追加します。このクラスのテストは、一括処理ジョブを呼び出し、これまでに購入されていない商品レコードをすべて削除したことを確認します。

  1. [Repository (リポジトリ)] タブの [Setup Entity Type (設定エンティティ種別)] セクションで、[Classes (クラス)] をクリックし、[New (新規)] をクリックします。
  2. クラス名として「TestCleanUpBatchClass」と入力し、[OK] をクリックします。
  3. 自動生成されたコードを削除し、次のコードを追加します。
    1swfobject.registerObject("clippy.codeblock-0", "9");@isTest
    2private class TestCleanUpBatchClass {
    3
    4    static testmethod void test() {
    5        // The query used by the batch job.
    6        String query = 'SELECT Id,CreatedDate FROM Merchandise__c ' + 
    7                   'WHERE Id NOT IN (SELECT Merchandise__c FROM Line_Item__c)';
    8
    9       // Create some test merchandise items to be deleted
    10       //   by the batch job.
    11       Merchandise__c[] ml = new List<Merchandise__c>();
    12       for (Integer i=0;i<10;i++) {
    13           Merchandise__c m = new Merchandise__c(
    14               Name='Merchandise ' + i,
    15               Description__c='Some description',
    16               Price__c=2,
    17               Total_Inventory__c=100);
    18           ml.add(m);
    19       }
    20       insert ml;
    21
    22       Test.startTest();
    23       CleanUpRecords c = new CleanUpRecords(query);
    24       Database.executeBatch(c);
    25       Test.stopTest();
    26
    27       // Verify merchandise items got deleted 
    28       Integer i = [SELECT COUNT() FROM Merchandise__c];
    29       System.assertEquals(i, 0);
    30    }
    31}
  4. [Save (保存)] をクリックします。

もうひとこと...

  • このテストクラスには、test という 1 つのテストメソッドが含まれます。このテストメソッドは、最初にクエリ文字列を作成し、CleanUpRecords のコンストラクタに渡します。これまでに購入されていない商品品目には、品目名が関連付けられていないはずなので、SOQL クエリでは次の条件を指定します。
    1WHERE Id NOT IN (SELECT Merchandise__c FROM Line_Item__c)
    サブクエリ
    1SELECT Merchandise__c FROM Line_Item__c
    は、品目名で参照されているすべての商品品目のセットを取得します。クエリでは WHERE 句に NOT IN 演算子を使用しているため、品目名で参照されていない商品品目が返されます。
  • テストメソッドは品目名が関連付けられていない 10 件の商品品目を挿入してから、一括処理クラスメソッドでクリーンアップします。テストメソッドが実行できるバッチは合計で 1 つのみであるため、挿入するレコードの数がデフォルトのバッチサイズである 200 件よりも少なくなっています。
  • 次に、一括処理クラスが次のステートメントを含むクエリでインスタンス化されます。ここでは query 変数が CleanUpRecords のコンストラクタに渡されます。
    1CleanUpRecords c = new CleanUpRecords(query);
  • 一括処理クラスを呼び出すために、Database.executeBatch をコールし、一括処理クラスのインスタンスを渡します。
    1Database.executeBatch(c);
  • Database.executeBatch へのコールは Test.startTestTest.stopTest で囲まれたブロック内に含まれます。これは、一括処理ジョブをテストメソッドで実行するために必要な条件です。ジョブは、Test.stopTest へのコールの後に実行されます。Test.startTest および Test.stopTest で囲まれたブロックに含まれる非同期コードは Test.stopTest の後に同期して実行されます。
  • 最後に、テストは商品品目の件数が 0 であることをチェックして、このテストで作成されたすべてのテスト商品品目が削除されたことを確認します。
  • 一括処理クラスの finish メソッドは状況を通知するメールメッセージを送信しますが、メールメッセージはテストメソッドからは送信されないため、この場合はメールは送信されません。