Salesforce 認定 Platform デベロッパー 上級 無料問題 7 / 10 ・ 分野4: テスト、デバッグ、リリース
SOSL で取引先を検索する処理のテストで、テストの中で作った取引先が検索結果に出てこない。ドキュメントの説明に合うものはどれか。
- 検索の索引ができるまで時間がかかるので、Test.stopTest() の後で検索し直す
- テストの SOSL は空の結果を返すので、setFixedSearchResults で返す ID を決める
- @isTest(SeeAllData=true) を付ければ、テストで作ったレコードも検索に出る
- テストの SOSL は組織にもとからあるデータを返すので、setFixedSearchResults で返す ID を決める
正解と解説を見る
正解: B
正解の理由
テストのメソッドがいつも予測できる動きをするよう、テストのメソッドの中の SOSL のクエリは、実行すると空の検索結果を返す。空でない結果を返させたいときは、Test.setFixedSearchResults のシステムメソッドで、検索が返すレコードの ID の一覧を決める。その後のテストのメソッドの中の SOSL は、すべてその ID の一覧を返す。
違う選択肢
「検索の索引ができるまで時間がかかるので、Test.stopTest() の後で検索し直す」… テストのメソッドの中の SOSL は、予測できる動きにするため空の検索結果を返す。待っても結果は変わらず、返す ID は Test.setFixedSearchResults で決める。
「@isTest(SeeAllData=true) を付ければ、テストで作ったレコードも検索に出る」… SOSL がテストで空になるのは、データの見え方ではなく、テストの SOSL が空の結果を返す決まりによる。
「テストの SOSL は組織にもとからあるデータを返すので、setFixedSearchResults で返す ID を決める」… テストのメソッドの中の SOSL は、組織にもとからあるデータもテストで作ったデータも返さず、空の検索結果を返す。結果が空になるのはこの決まりによるもので、返す ID を決めるときも、空の結果を前提に Test.setFixedSearchResults を呼ぶ。
押さえどころ
Test.setFixedSearchResults はテストの中で何度も呼べ、SOSL ごとに別の結果を決められる。呼ばないとき、または ID の一覧を渡さずに呼んだときは、後の SOSL は空の結果を返す。