テストメソッド書いてるといつも忘れてしまうのでメモ。
Apexコード開発者ガイド
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_data_access.htm
に書いてあることですが、
ApexのAPIバージョンが24.0以降で書かれたテストの場合、
テストメソッド内では既存のデータにアクセスすることができません。
ただし、一部のオブジェクトを除きます。
で、その「一部のオブジェクト」つまりテストメソッド中でもアクセス可能なオブジェクトというのが以下です。
- User (ロールも含む!)
- Profile
- Organization
- AsyncApexJob
- CronTrigger
- RecordType
- ApexClass
- ApexTrigger
- ApexComponent
- ApexPage
ただし、テストメソッドは組織に保存されているレコードに依存しないのが望ましいので
上記のオブジェクトであっても基本は新規作成した方が良さそうですね。
ハマるポイントとしては、APIバージョンが24.0より前であれば
テストメソッド内でも既存データにアクセスできてしまうということ。
レコード数でアサーションとか使う場合は最初に削除した方がいいですね。