この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

IsTest アノテーション

アプリケーションのテストに使用するコードのみを含むクラスおよびメソッドを定義するには @IsTest アノテーションを使用します。このアノテーションでは、括弧で囲まれ空白で区切られた複数の修飾子を使用できます。

メソッドの @IsTest アノテーションは、testMethod キーワードと同じです。Salesforce では、testMethod ではなく @IsTest を使用することをベストプラクティスとして推奨しています。testMethod キーワードは今後のリリースで廃止される可能性があります。

メモ

@IsTest として定義されたクラスとメソッドは private または public のいずれかと宣言する必要があります。@IsTest として定義されたクラスは最上位クラスである必要があります。

@IsTest アノテーションで指定されたクラスは、Apex コードの組織内の上限の 6 MB には含まれません。

メモ

次に、2 つのテストメソッドを含む非公開テストクラスの例を示します。

1@IsTest
2private class MyTestClass {
3
4   // Methods for testing
5   @IsTest
6   static void test1() {
7      // Implement test code
8   }
9
10   @IsTest
11   static void test2() {
12      // Implement test code
13   }
14
15}
次に、テストデータ作成のユーティリティメソッドを含む公開テストクラスの例を示します。
1@IsTest 
2public class TestUtil {
3
4   public static void createTestAccounts() { 
5      // Create some test accounts
6   }
7
8   public static void createTestContacts() {
9      // Create some test contacts
10   }
11
12}

@IsTest として定義されたクラスは、インターフェースまたは列挙値とすることはできません。

公開テストクラスのメソッドは、実行中のテスト、つまり、テストメソッドまたはテストメソッドから呼び出されるコードからのみコールすることができます。非テスト要求で公開メソッドをコールすることはできません。テストメソッドを実行できるさまざまな方法についての詳細は、「単体テストメソッドの実行」を参照してください。

@IsTest(SeeAllData=true) アノテーション

Salesforce API バージョン 24.0 以降を使用して保存された Apex コードでは、テストクラスおよび個々のテストメソッドに対して、組織のすべてのデータへのアクセス権を付与するには、@IsTest(SeeAllData=true) アノテーションを使用します。クラスには、テストで作成されていない既存のデータが含まれます。Salesforce API バージョン 24.0 以降を使用して保存された Apex コードでは、テストメソッドは組織の既存のデータにアクセスできません。ただし、Salesforce API バージョン 23.0 以前で保存されたテストコードは、引き続き組織のすべてのデータにアクセスできます。「単体テストの組織データとテストデータの分離」を参照してください。

@IsTest(SeeAllData=true) アノテーションの考慮事項
  • テストクラスが @IsTest(SeeAllData=true) アノテーションで定義されている場合、SeeAllData=true は、SeeAllData キーワードを明示的に設定していないすべてのテストメソッドに適用されます。
  • @IsTest(SeeAllData=true) アノテーションは、クラスまたはメソッドレベルで適用される場合にデータにアクセスできるようにするために使用します。ただし、含まれているクラスにすでに @IsTest(SeeAllData=true) アノテーションが付加されている場合、メソッドへの @IsTest(SeeAllData=false) アノテーションの付加は無視されます。この場合、そのメソッドは組織のすべてのデータにアクセスできます。メソッドへの @IsTest(SeeAllData=true) アノテーションの付加は、そのメソッドにおいて、クラスの @IsTest(SeeAllData=false) アノテーションよりも優先されます。
  • @IsTest(SeeAllData=true) アノテーションと @IsTest(IsParallel=true) アノテーションは、同じ Apex メソッドで同時に使用することはできません。
この例では、@IsTest(SeeAllData=true) アノテーションを使用してテストクラスを定義する方法を示します。このクラスのすべてのテストメソッドは組織のすべてのデータにアクセスできます。
1// All test methods in this class can access all data.
2@IsTest(SeeAllData=true)
3public class TestDataAccessClass {
4
5    // This test accesses an existing account. 
6    // It also creates and accesses a new test account.
7    @IsTest
8    static void myTestMethod1() {
9        // Query an existing account in the organization. 
10        Account a = [SELECT Id, Name FROM Account WHERE Name='Acme' LIMIT 1];
11        System.assert(a != null);
12        
13        // Create a test account based on the queried account.
14        Account testAccount = a.clone();
15        testAccount.Name = 'Acme Test';
16        insert testAccount;
17        
18        // Query the test account that was inserted.
19        Account testAccount2 = [SELECT Id, Name FROM Account 
20                                WHERE Name='Acme Test' LIMIT 1];
21        System.assert(testAccount2 != null);
22    }
23       
24    
25    // Like the previous method, this test method can also access all data
26    // because the containing class is annotated with @IsTest(SeeAllData=true).
27    @IsTest
28    static void myTestMethod2() {
29        // Can access all data in the organization.
30   }
31  
32}
この 2 番目の例では、テストメソッドに @IsTest(SeeAllData=true) アノテーションを適用する方法を示します。テストメソッドのクラスにはアノテーションが付加されていないため、メソッドがすべてのデータにアクセスできるようにするには、メソッドにアノテーションを付加する必要があります。2 番目のテストメソッドにはこのアノテーションはありません。そのため、テストメソッドでアクセスできるデータはテストメソッドで作成されたデータのみになります。組織の管理に使用するオブジェクト (ユーザなど) にはアクセスできます。
1// This class contains test methods with different data access levels.
2@IsTest
3private class ClassWithDifferentDataAccess {
4
5    // Test method that has access to all data.
6    @IsTest(SeeAllData=true)
7    static void testWithAllDataAccess() {
8        // Can query all data in the organization.      
9    }
10    
11    // Test method that has access to only the data it creates
12    // and organization setup and metadata objects.
13    @IsTest
14    static void testWithOwnDataAccess() {
15        // This method can still access the User object.
16        // This query returns the first user object.
17        User u = [SELECT UserName,Email FROM User LIMIT 1]; 
18        System.debug('UserName: ' + u.UserName);
19        System.debug('Email: ' + u.Email);
20        
21        // Can access the test account that is created here.
22        Account a = new Account(Name='Test Account');
23        insert a;      
24        // Access the account that was just created.
25        Account insertedAcct = [SELECT Id,Name FROM Account 
26                                WHERE Name='Test Account'];
27        System.assert(insertedAcct != null);
28    }
29}

@IsTest(OnInstall=true) アノテーション

@IsTest(OnInstall=true) アノテーションを使用して、パッケージのインストール時に実行される Apex テストを指定します。このアノテーションは、管理パッケージまたは未管理パッケージのテストで使用されます。このアノテーションを付加したテストメソッドまたはこのアノテーションを含むテストクラスの一部であるメソッドのみが、パッケージのインストール時に実行されます。パッケージのインストールが成功するためには、パッケージのインストール時に実行というアノテーション指定されたテストが正常に終了する必要があります。パッケージのインストール時に失敗したテストをバイパスすることはできなくなりました。このアノテーションが付加されていないテストメソッドまたはクラス、あるいは @IsTest(OnInstall=false) または @IsTest でアノテーションされたテストメソッドまたはクラスは、インストール時に実行されません。

パッケージのインストールとアップグレード時に実行される、IsTest(OnInstall=true) でアノテーションされたテストは、コードカバー率に反映されません。ただし、パッケージ作成操作中はコードカバー率は追跡され、計算されます。管理パッケージからインストールされた Apex コードは、コードカバー率の組織レベルの要件から除外されるため、影響を受ける可能性はありません。ただし、管理パッケージのテストカバー率を追跡する場合は、コードカバー率の統計が更新されるように、パッケージのインストールまたはアップグレード操作の外側でこれらのテストを再実行する必要があります。パッケージのインストールはコードカバー率の要件によってブロックされません。

次に、パッケージのインストール時に実行されるテストメソッドにアノテーションを付加する方法の例を示します。この例の test1 は実行されますが、test2test3 は実行されません。

1public class OnInstallClass {
2   // Implement logic for the class.
3   public void method1(){
4      // Some code
5   }
6}
1@IsTest
2private class OnInstallClassTest {
3   // This test method will be executed
4   // during the installation of the package.
5   @IsTest(OnInstall=true)
6   static void test1() {
7      // Some test code
8   }
9
10   // Tests excluded from running during the
11   // the installation of a package.
12
13   @IsTest
14   static void test2() {
15      // Some test code
16   }
17
18   @IsTest
19   static void test3() {
20      // Some test code
21   }
22}

@IsTest(IsParallel=true) アノテーション

@IsTest(IsParallel=true) アノテーションを使用して、並列実行できるテストクラスを示します。同時テスト数のデフォルト制限は、これらのテストクラスに適用されません。このアノテーションにより、より多くのテストを並列実行できるため、テストクラスをより効率的に実行できます。
@IsTest(IsParallel=true) アノテーションの考慮事項
  • このアノテーションは、並列テストを無効にする設定を上書きします。
  • @IsTest(SeeAllData=true) アノテーションと @IsTest(IsParallel=true) アノテーションは、同じ Apex メソッドで同時に使用することはできません。