[Salesforce]テスト実行時に組織化の全てのデータにアクセスする
salesforceでテストコードを実行させる場合、通常であればデータはテスト用にコード内で作成する必要があります。
しかし、組織内のデータを直接使用してテストしたい場合もあります。あります。
そんな時のメモ。
テストアノテーションメソッドを以下のようにすればよいだけ。
@isTest(SeeAllData=true)
これで組織化にある全データを使用してテストの実行が行えます。
ですが、もちろんsandboxと本番環境に差異がある場合はsandboxで通ったテストが本番では通らない、カバー率が低い、ということがありえますので注意です。
これを使用するシュチエーションとしては、活動履歴(ActivityHistory
)を使用する場合があります。
活動履歴は直接SOQLでは作成できず、テストコード内で作成したデータには紐付いて作成されません。
要するに、テスト実行する手段がない、よう。
その際に上記メソッドを使う事で組織内に作成されたデータを使用してのテストが必要になってきます。
もともとsalesforceはSpring '12
リリースまでは(API 24.0
より古いもの)では全データにアクセスが出来たよう。
それだと組織内のデータに依存してしまって上手くテスト実行が出来ない、という状態だったため、デフォルトでは組織内のデータにはアクセス出来ないように変更されたようです。
で、アクセスしたい場合は上記のコードを書けばよい、と。
上手く使えばテストが非常に落になりそうです(違う)。
上記メソッドを使用しなくても以下のデータは組織内のデータを使用してテスト実行が可能なようです。
- User
- Profile
- Organization
- RecordType
- ApexClass
- ApexTrigger
- ApexComponent
- ApexPage
参考
[Salesforce]活動履歴(ActivityHistory)がテストで取得できない? – dackdive's blog
セールスフォースの豆知識: テストメソッドがアクセスできるデータが変わりました