スケジュール実行するApexのテストメソッドと実行時刻の詳細設定

今回は前回の続きで、スケジュール実行するApexのテストメソッドの書き方と実行時刻の詳細設定方法のお話。

スケジュール実行するApexのテストは、

・Test.startTestメソッド
System.scheduleメソッド
・Test.stopTestメソッド

の順に呼び出すことで、実施します。

System.scheduleメソッドは、Apexをスケジュール設定するメソッドで、
・第1引数:ジョブ名(任意の名前)
・第2引数:クーロン式(実行時刻を設定)
・第3引数:Apexクラスのインスタンス

を受け取り、ジョブIDを返します。

クーロン式は、'0 0 0 3 9 ? 2022'のような式で、左から順に秒、分、時、日、月、曜日、年を表しています(年は省略可)。

<クーロン式の例 ・・・ 詳しい説明は こちら

・'0 0 13 * * ?':毎日13時に実行
・'0 0 10 ? * MON-FRI':月~金の10時に実行

テスト時に、System.scheduleメソッドで設定した実行時刻になるのを待つ必要はありません。Test.stopTestメソッドをコールすることで、System.scheduleメソッドで設定したジョブが実行され、ジョブの処理結果を確認することができるようになっています。

ソースコードはこんな感じ↓

// テストメソッド
static testMethod void hogeClassTest() {
	// テストデータ準備

	// テスト開始
	Test.startTest();
	
	// Apexをスケジュールに登録
	String jobId = 
		System.schedule('TestScheduledApex',
		'0 0 * * * ?', new HogeClass());
	
	// テスト終了(登録したスケジュールが実施される)
	Test.stopTest();

	// テストデータの確認
}

前回、『画面からの設定だと、「1日に1回しかスケジューリングできない」「1時間単位でしかスケジューリングできない」』と書きましたが、System.scheduleメソッドを利用すれば、1日に複数回実行することや、分単位で実行することも可能となるので、細かく設定したいときはこちらが便利です。

コメント(0)