Apexテストクラスで作成日や最終更新日時をテストする方法

By | July 20, 2020

正攻法(作成日)

↓setCreatedDateメソッドを利用する。

@isTest 
private class SetCreatedDateTest {
    static testMethod void testSetCreatedDate() {
        Account a = new Account(name='myAccount');
        insert a;
        Test.setCreatedDate(a.Id, DateTime.newInstance(2012,12,12));

        Test.startTest();
        Account myAccount = [SELECT Id, Name, CreatedDate FROM Account 
                             WHERE Name ='myAccount' limit 1];
        System.assertEquals(myAccount.CreatedDate, DateTime.newInstance(2012,12,12));
        Test.stopTest();
    }
}

正攻法(最終更新日時)

↓静的リソース使う。

https://salesforce.stackexchange.com/questions/147056/how-to-change-the-lastmodifieddate-of-a-record-in-a-test-class/147062

裏技(SIerは使用厳禁)

監査項目の設定を有効化すると、Account.CreatedDate = Datetime.now().addDays(-10)やAccount.LastModifiedDate = Datetime.now().addDays(-5)などで直に作成日や最終更新日時をいじれるようになります。(※Insert時に設定できるだけで、項目のUpdateは不可のまま)

なので、普段は監査項目の設定を無効化しておきたい場合でも、Apexテストの実行時やApexClassのリリース時だけ一時的に有効化する作戦を取れば、正攻法のような面倒な設定をしなくて済みます。

「監査項目の設定の有効化」のやり方

https://ehrenfest.com/post-1539/