問題
Apex テストクラスで @testSetup アノテーションを使用することについて、正しい記述はどれですか。3つ選びなさい。
- isTest(SeeAllData=True) アノテーションが使用されている場合、@testSetup アノテーションは使用できません。
- テストデータは、クラス内のすべてのテストメソッドに対して 1 回挿入されます。
- testSetup メソッドで作成されたレコードを、個々のテストメソッドで更新することはできません。
- テストクラスの各テストメソッドが実行される前に、@testSetup メソッドが自動的に実行されます。
正解
- isTest(SeeAllData=True) アノテーションが使用されている場合、@testSetup アノテーションは使用できません。
- テストデータは、クラス内のすべてのテストメソッドに対して 1 回挿入されます。
- testSetup メソッドで作成されたレコードを、個々のテストメソッドで更新することはできません。
- テストクラスの各テストメソッドが実行される前に、@testSetup メソッドが自動的に実行されます。
解説
@testSetup
アノテーションを使うことで、テストクラスの全てのテストメソッドに共通のテストデータを一度だけ設定することができます。これによりテストの実行時間を短縮し、リソースの効率的な使用が可能になります。テスト実行後、各メソッドで行われたデータの変更はロールバックされるため、各テストメソッドは互いに影響せず、常にクリーンな状態でテストを開始できます。
- 注意点:
@testSetup
メソッドはテストクラスに1つだけ定義できます。- テストメソッドで
@IsTest(SeeAllData=true)
アノテーションが使われている場合、@testSetup
メソッドは使用できません。 @testSetup
メソッド内で発生した致命的なエラーはテストクラス全体を失敗させます。- テスト設定メソッドは、引数を取らず、値を返さない静的メソッドとして定義します。
参考:TestSetup アノテーション、テスト設定メソッドの使用
それぞれの選択肢の理由について説明します。
□ isTest(SeeAllData=True) アノテーションが使用されている場合、@testSetup アノテーションは使用できません。
これは正解です。isTest(SeeAllData=True)
を使用すると、実際の組織データにアクセスすることになりますが、@testSetup
はテスト実行の際に独自のテストデータを設定するために使用されるため、両者は同時には使用できません。
□ テストデータは、クラス内のすべてのテストメソッドに対して 1 回挿入されます。
これは正解です。@testSetup
で定義されたメソッドは、テストクラス内の各テストメソッドが実行される前に一度だけ実行され、生成されたテストデータは各テストメソッドで使用されます。
□ testSetup メソッドで作成されたレコードを、個々のテストメソッドで更新することはできません。
これは不正解です。@testSetup
メソッドで作成されたレコードは、各テストメソッド内で更新することができます。ただし、各テストメソッドは独立しているため、あるテストメソッドでの変更は他のテストメソッドには影響しません。
□ テストクラスの各テストメソッドが実行される前に、@testSetup メソッドが自動的に実行されます。
これは正解です。これは@testSetup
アノテーションの基本的な動作であり、このメソッドは各テストメソッドが実行される前に自動的に一度だけ実行されます。これにより、すべてのテストメソッドに対して共通のテストデータを準備することができます。
コメント