No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
レッスン 2: スケジュール可能なクラスのテストの追加
前提条件:
スケジュール可能なクラスを追加したので、クラスがテスト対象となるようにテストメソッドも追加する必要があります。このレッスンでは 1 つのテストメソッドが含まれるテストクラスを追加します。そのテストメソッドが System.Schedule をコールしてクラスをスケジュールします。
[Apex クラス] ページに切り替えて、テストクラスを作成します。テストはこのページから実行します。
- [設定] で、 をクリックします。
- コードエディタボックスで、次のテストクラスを追加します。
1swfobject.registerObject("clippy.codeblock-0", "9");@isTest 2private class TestSchedulableClass { 3 4 // CRON expression: midnight on March 15. 5 // Because this is a test, job executes 6 // immediately after Test.stopTest(). 7 public static String CRON_EXP = '0 0 0 15 3 ? 2022'; 8 9 static testmethod void test() { 10 Test.startTest(); 11 12 // Schedule the test job 13 String jobId = System.schedule('ScheduleApexClassTest', 14 CRON_EXP, 15 new MySchedulableClass()); 16 17 // Get the information from the CronTrigger API object 18 CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, 19 NextFireTime 20 FROM CronTrigger WHERE id = :jobId]; 21 22 // Verify the expressions are the same 23 System.assertEquals(CRON_EXP, 24 ct.CronExpression); 25 26 // Verify the job has not run 27 System.assertEquals(0, ct.TimesTriggered); 28 29 // Verify the next time the job will run 30 System.assertEquals('2022-03-15 00:00:00', 31 String.valueOf(ct.NextFireTime)); 32 // Verify the scheduled job hasn't run yet. 33 Merchandise__c[] ml = [SELECT Id FROM Merchandise__c 34 WHERE Name = 'Scheduled Job Item']; 35 System.assertEquals(ml.size(),0); 36 Test.stopTest(); 37 38 // Now that the scheduled job has executed after Test.stopTest(), 39 // fetch the new merchandise that got added. 40 ml = [SELECT Id FROM Merchandise__c 41 WHERE Name = 'Scheduled Job Item']; 42 System.assertEquals(ml.size(), 1); 43 44 } 45} - [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 の後に同期して実行されます。
- 最後に、テストメソッドは、スケジュール済みクラスによって新しい商品品目が追加されたことを確認します。