問題
開発者がTest.startTest()およびTest.stopTest()を使用する理由は次のうちどれですか。
- この2つの行間のコードのApexコードカバレッジ要件を回避するため
- 匿名Apexコードの実行時に匿名ブロックの実行を開始および停止するため
- テストコードを指定して、Apexの行数ガバナ制限に影響を与えないようにするため
- 単一のテストクラスの実行中にガバナ制限の追加セットを作成するため
正解
- この2つの行間のコードのApexコードカバレッジ要件を回避するため
- 匿名Apexコードの実行時に匿名ブロックの実行を開始および停止するため
- テストコードを指定して、Apexの行数ガバナ制限に影響を与えないようにするため
- 単一のテストクラスの実行中にガバナ制限の追加セットを作成するため
解説
Test.startTest()
およびTest.stopTest()
は、SalesforceのApexテストの文脈で特定の目的を果たすために使用されるメソッドです。これらのメソッドはそれぞれ異なった役割を持っていますが、一般的には2つのメソッドをセットで使用することが多いです。そのため、一見、これらがセットで1つの役割を果たすように感じられるかもしれません。以下に、これらのメソッドが使用される主な場面と目的をまとめます。
- ガバナ制限のリセット:
Test.startTest()
はテストのガバナ制限をリセットするために使用されます。Salesforceには、Apexコードの実行時に適用される一連のガバナ制限があります(例: SOQLクエリの数、DML操作の数など)。テストの実行時に、初期の設定やデータの準備でこれらの制限を大部分使用してしまうと、実際のテストロジックを実行する際に制限を超えてしまう恐れがあります。Test.startTest()
を使用することで、これらのガバナ制限をリセットし、実際のテストのロジックの実行に集中できるようになります。
- 非同期プロセスの即座の実行:
Test.stopTest()
は、Test.startTest()
の後にキューに入れられた非同期プロセス(例: バッチApex、スケジュールジョブ、キューアブルジョブ、将来のメソッドなど)を即座に実行するために使用されます。通常、これらの非同期プロセスはキューに入れられ、後で実行されることが期待されますが、テストの文脈では、これらのプロセスの結果を検証するために即座に実行する必要があります。
それぞれの選択肢の理由について説明します。
□ この2つの行間のコードのApexコードカバレッジ要件を回避するため
これは不正解です。Test.startTest()
およびTest.stopTest()
はコードカバレッジ要件を回避するためのものではありません。これらはガバナ制限をリセットするためや非同期プロセスを即座に実行するために使用されます。
□ 匿名Apexコードの実行時に匿名ブロックの実行を開始および停止するため
これは不正解です。匿名Apexの実行に関して、Test.startTest()
およびTest.stopTest()
は特に役立つわけではありません。これらのメソッドはテストメソッド内で使用され、主にガバナ制限のリセットや非同期プロセスの即座の実行に使用されます。
□ テストコードを指定して、Apexの行数ガバナ制限に影響を与えないようにするため
これは不正解です。Test.startTest()
とTest.stopTest()
の間に記述されたコードは、ガバナ制限のリセットの恩恵を受けることができますが、それは「行数」ガバナ制限とは異なるものです。
□ 単一のテストクラスの実行中にガバナ制限の追加セットを作成するため
これは正解です。Test.startTest()
を呼び出した後、ガバナ制限がリセットされ、Test.stopTest()
までの間に実行されるコードは、この新しいセットのガバナ制限に基づいて動作します。これにより、テスト内で行われる前の設定や後の検証でのガバナ制限の消費を防ぐことができます。
コメント