Apex スケジューラを使用したジョブのスケジュール

概要
Apexスケジューラは非同期処理で最もよく使うインターフェースです。
一括処理と併用すれば大量のレコードを定期実行で処理できる

問題

スケジュールされたApexを使用してリードレコードを更新するApexクラスを作成します。
特定のLeadSourceでLeadレコードを更新するSchedulableインターフェースを実装するApexクラスを作成します。 クラスのコードカバレッジを100%達成する単体テストを作成します。 これは、BatchApexで行ったことと非常によく似ています。

Schedulableインターフェースを使用する「DailyLeadProcessor」というApexクラスを作成します。
executeメソッドは、LeadSourceフィールドが空白の最初の200件のリードを検索し、それらを「Dreamforce」のLeadSource値で更新する必要があります。
‘DailyLeadProcessorTest’というApexテストクラスを作成します。
テストクラスで、200のリードレコードを挿入し、DailyLeadProcessorクラスを実行するようにスケジュールして、すべてのリードレコードが正しく更新されたことをテストします。
単体テストは、DailyLeadProcessorクラスに含まれるコードのすべての行をカバーする必要があり、100%のコードカバレッジが得られます。
このチャレンジを検証する前に、テストクラスを少なくとも1回実行します(「すべて実行」を使用して開発者コンソールをテストします)。

Apexクラスの定義

global class DailyLeadProcessor implements Schedulable {

  global void execute(SchedulableContext ctx) {
    List<Lead>leadLst = [SELECT Id,LeadSource FROM Lead WHERE LeadSource = NULL LIMIT 200];
      List<Lead>upLst = new List<Lead>();
      
      for(lead ld : leadLst) {
         if(ld.LeadSource ==NULL) {
           ld.LeadSource = 'Dreamforce';
             upLst.add(ld);
         }
      }
      update upLst;
  }
}

テストクラスの定義
Apex スケジューラを使用したジョブのスケジュール

@isTest
public class DailyLeadProcessorTest {
  
   @testSetup
   static void setup() {
   
     List<Lead>leadLst = new List<Lead>();
       
       for( Integer i=0; i< 200; i++){
          leadLst.add(new Lead(
               LastName = 'Test' + i,
               Company = 'Name' + i,
               LeadSource = NULL 
             ));
          Insert leadLst;
       }
   @isTeat
   static void testMethod1() {
     List<Lead>leadLst = [SELECT Id FROM Lead LIMIT 200];
     
       Sting CRON_EXP = '0 0 0 16 4 ? 2024';
       
       System.Test.startTest();
       String jobId = System.schedule('DailyLeadProcessor',
                                      CRON_EXP,
                                      new DailyLeadProcessor());
       System.Test.stopTest();
       
   }

}

 

IT

Posted by arkgame