問題
Apexテストクラスを作成するときに使用できるメソッドは何ですか。2つ選びなさい。
- 開発者コンソールで無視するエラータイプを選択するメソッド
- @futureメソッドの後にテストするアサーションを作成するメソッド
- ApexテストでCreatedDateフィールドを設定および変更するメソッド
- ブレークポイントを設定して、特定のポイントで実行をフリーズするメソッド
- システムに保存されているcsvファイルを使用してテストデータを選択するメソッド
正解
- 開発者コンソールで無視するエラータイプを選択するメソッド
- @futureメソッドの後にテストするアサーションを作成するメソッド
- ApexテストでCreatedDateフィールドを設定および変更するメソッド
- ブレークポイントを設定して、特定のポイントで実行をフリーズするメソッド
- システムに保存されているcsvファイルを使用してテストデータを選択するメソッド
解説
それぞれの選択肢の理由について説明します。
□ 開発者コンソールで無視するエラータイプを選択するメソッド
これは不正解です。開発者が特定のエラータイプをプログラムコード(Apexテストクラス)で「無視する」ような設定を行うメソッドは、Apexには存在しません。エラーハンドリングはtry/catchブロックを用いて行われますが、これはエラーを捕捉し処理するための構文であり、「無視する」設定ではありません。エラーは適切に捕捉し、適切な処理を行うことが期待されます。
□ @futureメソッドの後にテストするアサーションを作成するメソッド
これは不正解です。そのようなテストメソッドは存在しません。テストメソッドにこのような@futureアノテーションがついたメソッドは非同期に実行されるため、@futureメソッドの直後にアサーションを書いても、そのメソッドの結果がまだ得られていないために、テストは失敗します。テストコード内で@futureメソッドをテストする場合、Test.startTest()とTest.stopTest()を使用します。Test.stopTest()は、@futureメソッドを含むすべての非同期処理が完了するまで待つことができます。
□ ApexテストでCreatedDateフィールドを設定および変更するメソッド
これは正解です。ApexテストメソッドTest.setCreatedDate(recordId, createdDatetime)を使用して、テスト実行中にsObjectレコードのCreatedDateフィールドを設定することができます。
参考:setCreatedDate
□ ブレークポイントを設定して、特定のポイントで実行をフリーズするメソッド
これは不正解です。ブレークポイントはデバッグのためのツールであり、コードの特定のポイントで実行を一時停止することができますが、Apexテストクラス内でブレークポイントを設定するメソッドは存在しません。
□ システムに保存されているcsvファイルを使用してテストデータを選択するメソッド
これは正解です。ApexのTest.loadDataメソッドを使うと、静的リソースとして保存されているCSVファイルからデータをロードし、テストデータとして使用することができます。
参考:loadData
コメント