ポイント
・データの準備が別にする
・データがStringで共通方法でInsert、Selectする
・テスト前後のデータを対照する
・バッチの実行は特定のキーワードで囲む
例
setUp
@isTest
private class AccountLinkRMListTest{
@TestSetup static void setUp() {
string strAcc ='['
+'{"Name":"TST000001","corporate_number__c":"123456"},'
+'{"Name":"TST000002"}]';
CommonDmlUtil.commonInsertRecords(strAcc,'List<Account>',true);
List<Account> accList = [SELECT id, name FROM Account];
System.debug(accList);
}
test method
prepare data before and display it after
@isTest
static void batchTestCase005(){
//defore
Account accList0 = [SELECT id,Name,LastModifiedDate FROM Account WHERE corporate_number__c = '123456' limit 1];
System.debug('Case005before 取引先'+accList0);
RMBusinessSectionList__c rmList00 = [ SELECT id, Account__c,LastModifiedDate FROM RMBusinessSectionList__c
WHERE corporate_number__c = '123456' limit 1 ];
System.debug('Case005before RM営業 取引先 null : ' + rmList00);
System.debug('Case005指定期間: '+System.Label.AccountLinkRMListPeriod+'');
rmList00.Account__c=accList0.id;
update rmList00;
RMBusinessSectionList__c rmList01 = [ SELECT id, Account__c,LastModifiedDate FROM RMBusinessSectionList__c
WHERE corporate_number__c = '123456' limit 1 ];
System.debug('Case005before RM営業: ' + rmList01);
//execute
Test.startTest();
AccountLinkRMList bc = new AccountLinkRMList();
Database.executeBatch(bc, 20);
Test.stopTest();
RMBusinessSectionList__c rmList03 = [ SELECT id, Account__c,LastModifiedDate FROM RMBusinessSectionList__c
WHERE corporate_number__c = '123456' limit 1 ];
System.debug('Case005after RM営業: ' + rmList03);
//対象のレコードが更新されないこと
System.assertEquals(accList0.Id, rmList03.Account__c);
}
補足データ処理の共通モジュール
public with sharing class CommonDmlUtil {
/**
* @name commonInsertRecords
* @parameter String strJSONData
* sample:[{},{},{}] or {} if signle
* @parameter String strType
* sample: '<List>Contact' or 'Contact' if sigle
* @parameter Boolean boolIsList
* sample: true of false if sigle
* @return void
*/
@AuraEnabled(cacheable=false)
public static void commonInsertRecords(String strJSONData, String strType, Boolean boolIsList) {
List<SObject> lstObjects = new List<SObject>();
if (boolIsList) {
lstObjects = (List<SObject>) JSON.deserialize(strJSONData, Type.forName(strType));
} else {
SObject obj = (SObject) JSON.deserialize(strJSONData, Type.forName(strType));
lstObjects.add(obj);
}
System.debug('lstObject: '+lstObjects);
insert lstObjects;
}
/**
* @name commonSelectRecords
* @parameter String strSql
* sample: 'select id, name from Contact'
* @return List<SObject>
*/
@AuraEnabled(cacheable=true)
public static List<SObject> commonSelectRecords(String strSql) {
return Database.query(strSql);
}
}