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

スケジュール可能なクラスのテストの追加

前提条件:

スケジュール可能なクラスを追加したため、クラスがテスト対象であることを確認するテストメソッドを追加できます。このレッスンでは 1 つのテストメソッドが含まれるテストクラスを追加します。そのテストメソッドが System.Schedule をコールしてクラスをスケジュールします。

テストは開発者コンソールから実行できますが、ここでは [Apex クラス] ページにリストされているクラスからテストを実行します。次のステップで、この同じページからクラスをスケジュールします。

  1. [設定] で、[開発] | [Apex クラス] | [新規] をクリックします。
  2. コードエディタボックスで、次のテストクラスを追加します。
    1swfobject.registerObject("clippy.codeblock-0", "9");
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17@isTest
    18private class TestSchedulableClass {
    19
    20   // CRON expression: midnight on March 15.
    21   // Because this is a test, job executes
    22   // immediately after Test.stopTest().
    23   public static String CRON_EXP = '0 0 0 15 3 ? 2022';
    24
    25   static testmethod void test() {
    26      Test.startTest();
    27
    28      // Schedule the test job
    29      String jobId = System.schedule('ScheduleApexClassTest',
    30                        CRON_EXP, 
    31                        new MySchedulableClass());
    32         
    33      // Get the information from the CronTrigger API object
    34      CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, 
    35         NextFireTime
    36         FROM CronTrigger WHERE id = :jobId];
    37
    38      // Verify the expressions are the same
    39      System.assertEquals(CRON_EXP, 
    40         ct.CronExpression);
    41
    42      // Verify the job has not run
    43      System.assertEquals(0, ct.TimesTriggered);
    44
    45      // Verify the next time the job will run
    46      System.assertEquals('2022-03-15 00:00:00', 
    47         String.valueOf(ct.NextFireTime));
    48      // Verify the scheduled job hasn't run yet.
    49      Merchandise__c[] ml = [SELECT Id FROM Merchandise__c 
    50                             WHERE Name = 'Scheduled Job Item'];
    51      System.assertEquals(ml.size(),0);
    52      Test.stopTest();
    53
    54      // Now that the scheduled job has executed after Test.stopTest(),
    55      //   fetch the new merchandise that got added.
    56      ml = [SELECT Id FROM Merchandise__c 
    57                             WHERE Name = 'Scheduled Job Item'];
    58      System.assertEquals(ml.size(), 1);
    59
    60   }
    61}
  3. [Save (保存)] をクリックします。
  4. [Run Test (テストを実行)] をクリックしてテストメソッドを実行します。

もうひとこと...

  • このテストメソッドは、System.schedule メソッドをコールして MySchedulableClass クラスをスケジュールします。System.Schedule メソッドは、ジョブの名前、ジョブの実行予定日時を表すために使用する式、クラスの名前という 3 つの引数を取ります。System.schedule メソッドでは、すべてのスケジュールの基準としてユーザのタイムゾーンが使用されます。
  • System.schedule へのコールは Test.startTestTest.stopTest ブロック内に含まれます。これにより、cron 式で指定されたスケジュールに関係なく、ジョブは Test.stopTest コールの後に実行されます。Test.startTest および Test.stopTest で囲まれたブロックに含まれる非同期コードは Test.stopTest の後に同期して実行されます。
  • 最後に、テストメソッドは、スケジュール済みクラスによって新しい商品品目が追加されたことを確認します。
  • System.Schedule メソッドは、ジョブの名前、ジョブの実行予定日時を表すために使用する式、クラスの名前という 3 つの引数を取ります。
  • 一度にスケジュール設定できるクラスの数は 100 です。

ヒント