
※この記事にはアフィリエイトリンクを含みます。
Apexテストで地味に詰まりやすいのが、@IsTest(SeeAllData=false) の理解です。
ここが曖昧だと「環境によって通ったり落ちたりする」テストになりやすいです。
@IsTest(SeeAllData=false) は、テスト実行時に“組織の既存データ(本番データ)を参照できない”状態にする指定です。
テストが本番データに依存しなくなり、環境差で落ちない安定したテストになります。
この記事では、次の3点だけを短くまとめます。
- SeeAllData=false で何が起きるか
- @IsTest だけ書いた場合にどうなるか
- SeeAllData=true を使う(使わざるを得ない)場面と注意点
Contents
結論:基本は SeeAllData=falseで書く
SeeAllData=false は、テストの中から 組織に既に存在するレコード(本番データ)を見えなくする設定です。
その代わり、テスト内で作ったデータ(insertしたレコード)だけを使って検証します。
こうしておくと、
- 本番データが変わってもテストが落ちにくい
- Sandbox/本番など環境差でも結果がブレにくい
というメリットがあります。
※ なので次は「データの作り方」を型にしておくと、テストが一気に安定します。
SeeAllData=falseだと何が見えない?
ざっくり言うと、既存のレコード(データ)が見えません。
例:既に組織にある Account や商談などを、テストから検索しても基本的に取れません。
Integer cnt = [SELECT COUNT() FROM Account];
System.assertEquals(0, cnt);
なので、テストに必要なレコードは テストの中で自分で作るのが基本になります。
@IsTest だけ書いた場合、SeeAllDataはどうなる?
結論としては、基本は SeeAllData=false 相当(=本番データに依存しない)で考えてOKです。
ただし、チームで見たときに意図が明確になるので、実務では クラス側に明示しておくのが無難です。
@IsTest(SeeAllData=false)
public class SampleTest {
@IsTest
static void testSomething() {
// ...
}
}
最小サンプル:テストデータを作って検証する
SeeAllData=false の前提では、テスト用データを自分で作るのが基本です。
最小構成はこんな形になります。
@IsTest(SeeAllData=false)
public class AccountTest {
@IsTest
static void testAccountCreation() {
// テスト用データを作る
Account acc = new Account(Name = 'Test Account');
insert acc;
// 期待通りに作成できたか確認
Integer cnt = [SELECT COUNT() FROM Account WHERE Name = 'Test Account'];
System.assertEquals(1, cnt);
}
}
ポイントはこれだけです。
- 「本番にあるはずのデータ」を探さない
- 必要なものはテスト内で作る
- 期待値(assert)で検証する
SeeAllData=trueの場合はどうなる?
SeeAllData=true にすると、テスト内から 組織の既存データ(本番データ)を参照できるようになります。
ただし、その瞬間にテストが データ依存になりやすく、環境によって結果が変わります。
つまり、
- たまたま存在するデータに頼ってテストが通う
- データが消えたり変わったりすると、突然落ちる
が起きやすいです。なので、基本は避けるのが無難です。
SeeAllData=trueを使うのはどんな時?
原則は「最後の手段」です。
それでも使う可能性があるのは、ざっくり次のようなケースです。
- テスト内で再現が難しい 設定/構造に強く依存している
- 再現に時間がかかりすぎて現実的ではない
- どうしても既存レコードを参照しないと検証できない
ただし、使う場合でも「参照条件を絞る」「更新しない」など、事故りにくい形に寄せるのが大事です。
FAQ(よくある疑問)
Q. SeeAllData=falseだと何も参照できない?
A. いいえ。少なくとも「組織の既存レコード(本番データ)」は参照できない、と考えるのが安全です。
必要なデータはテスト内で作る前提にすると安定します。
Q. SeeAllData=trueは使っちゃダメ?
A. 絶対ダメではないですが、テストがデータ依存になりやすいので原則は避けます。
使うなら「最後の手段」と割り切って、条件を絞って参照中心にします。
まとめ
- @IsTest(SeeAllData=false) は 本番データに依存しないテストにする指定
- テストに必要なレコードは テスト内で作るのが基本
- SeeAllData=true は 環境差で壊れやすいので最後の手段
|毎回コピペをやめる最小テンプレ.png)

