スケジュール可能なクラスのテストの追加
前提条件:
スケジュール可能なクラスを追加したため、クラスがテスト対象であることを確認するテストメソッドを追加できます。このレッスンでは 1 つのテストメソッドが含まれるテストクラスを追加します。そのテストメソッドが System.Schedule をコールしてクラスをスケジュールします。
テストは開発者コンソールから実行できますが、ここでは [Apex クラス] ページにリストされているクラスからテストを実行します。次のステップで、この同じページからクラスをスケジュールします。
- [設定] で、 をクリックします。
-
コードエディタボックスで、次のテストクラスを追加します。
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} - [Save (保存)] をクリックします。
- [Run Test (テストを実行)] をクリックしてテストメソッドを実行します。
もうひとこと...
- このテストメソッドは、System.schedule メソッドをコールして MySchedulableClass クラスをスケジュールします。System.Schedule メソッドは、ジョブの名前、ジョブの実行予定日時を表すために使用する式、クラスの名前という 3 つの引数を取ります。System.schedule メソッドでは、すべてのスケジュールの基準としてユーザのタイムゾーンが使用されます。
- System.schedule へのコールは Test.startTest と Test.stopTest ブロック内に含まれます。これにより、cron 式で指定されたスケジュールに関係なく、ジョブは Test.stopTest コールの後に実行されます。Test.startTest および Test.stopTest で囲まれたブロックに含まれる非同期コードは Test.stopTest の後に同期して実行されます。
- 最後に、テストメソッドは、スケジュール済みクラスによって新しい商品品目が追加されたことを確認します。