Salesforceのプログラム言語であるAPEXでバッチがあるが、
バッチで即時実行のやり方がよくわからなかったので、それのメモ。
ちなみにトリガーのテストの記事はこちら。
バッチの例
取引先オブジェクトの従業員数を1人加算しているだけです。
AccountBatch
public class AccountBatch implements Database.Batchable<sObject>, Database.Stateful {
/**
* コンストラクタ
*/
public AccountBatch() {
}
/**
* Start
*/
public Database.QueryLocator start(Database.BatchableContext BC) {
String query = 'SELECT Id,NumberOfEmployees FROM Account';
return Database.getQueryLocator (query);
}
/**
* Execute
*/
public void execute(Database.BatchableContext BC, List<Account> accountList) {
List<Account> updAccountList = new List<Account>();
for (Account acc : accountList) {
acc.NumberOfEmployees += 1;
updAccountList.add(acc);
}
update updAccountList;
}
/**
* Finish
*/
public void finish(Database.BatchableContext BC) {
}
}
テストクラスの例
バッチはTest.startTestとTest.stopTestの間に書くことでよいらしいです。
AccountBatchTest
@isTest
private class AccountBatchTest {
/*
* 従業員数が1加算されていることをテスト
*/
@isTest static void test_method_1() {
// テストデータの作成
List<Account> accList = Test.loadData(Account.sObjectType, 'Test_Account_Data');
// テストの開始
Test.startTest();
AccountBatch batchable = new AccountBatch();
Database.executeBatch(batchable);
Test.stopTest();
// 検証
ist<Account> accResultList = [SELECT Id,NumberOfEmployees FROM Account];
for (Account accNew : accResultList) {
for (Account accOld : accList) {
System.assertEquals(accOld.NumberOfEmployees + 1 , accNew.NumberOfEmployees);
}
}
}
}