[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
セールスフォースの豆知識: テストメソッドがアクセスできるデータが変わりました

   このエントリーをはてなブックマークに追加