- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
CreatedDate
を設定するための便利なメソッドTest.setCreatedDate
が用意されています。このメソッドを使用することで、監査フィールドのCreatedDate
をユニットテスト内で操作可能になり、テストの柔軟性が向上します。Test.setCreatedDate
の概要
目的
CreatedDate
は通常読み取り専用ですが、ユニットテスト環境ではTest.setCreatedDate
を使うことで、このフィールドを設定できます。制約条件
- このメソッドはテスト中に作成されたレコードにのみ適用可能です。既存のレコードには使用できません。
@isTest(SeeAllData=true)
が付与されたメソッドでは使用できません。CreatedDate
を未来の日付に設定すると、予期しない動作を引き起こす可能性があります。- このメソッドはsObject IDとDatetime値の2つの引数を取ります。どちらも
null
にすることはできません。
使用例
以下は、Account
オブジェクトのCreatedDate
を設定するユニットテストのサンプルコードです。
@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(); } }
コードの解説
insert
の順序Test.setCreatedDate
を使用するには、まずレコードをデータベースに挿入する必要があります。挿入後にIDが生成され、これを基にsetCreatedDate
を実行します。Datetime
の利用Datetime.newInstance
を使用して、特定の日付と時刻を生成します。この値をCreatedDate
に設定します。クエリでの確認
SELECT
クエリで挿入されたレコードを取得し、CreatedDate
が正しく設定されたかをSystem.assertEquals
で検証します。
注意点と活用例
注意点
- 他の監査フィールド(例:
LastModifiedDate
)については、Test.setCreatedDate
では設定できません。 - 未来日付を設定すると、後続のロジックで予期しない動作が発生する可能性があります。
活用例
時間差を扱うトリガーのテスト
例:CreatedDate
からの経過日数に基づいて特定の処理を行うトリガーのテスト。特定の日付に依存するロジックのテスト
例:キャンペーンの有効期限や契約の開始日を評価するロジック。
コメント
コメントを投稿