Salesforce テストクラスは、Apex コードのユニットテストを実行するために使用されます。
以下は、Salesforce テストクラスの作成手順の概要です。

  1. テストクラスの作成
  • 開発環境(Salesforce 開発コンソールや統合開発環境など)を開きます。
  • 新しい Apex クラスを作成し、テストクラスとしてマークします。
  1. テストメソッドの作成:
  • テストクラス内に、テストメソッドを作成します。
  • メソッド名を test キーワードで始め、テスト対象のコードをカバーするようにメソッドを実装します。
  1. テストデータの作成:
  • テストメソッド内で、テストデータを作成します。
  • テストデータは、テスト対象のコードが期待どおりに動作するかを確認するために使用されます。
  1. テストケースの実行:
  • テストメソッド内で、テスト対象のコードを呼び出します。
  • テストケースが期待どおりに実行され、正常な結果が得られることを確認します。
  1. アサーションの使用:
  • テストメソッド内で、アサーションを使用してテスト結果を検証します。
  • 期待される結果と実際の結果を比較し、一致しない場合はテストが失敗するようにします。
  1. テストクラスの実行:
  • テストクラス全体を実行し、すべてのテストメソッドが実行されることを確認します。
  • テスト結果を確認し、テストが成功したかどうかを判断します。
  1. カバレッジの確認:
  • テストクラスの実行によってカバレッジが計算されます。
  • カバレッジレポートを確認し、テスト対象のコードが十分なカバレッジを持っていることを確認します。

具体的な例

以下は、具体的な例として、Salesforce のテストクラスを作成する手順とコードの一例です。この例では、アカウントオブジェクトのカスタムロジックをテストするためのテストクラスを作成します。

  1. テストクラスの作成:
@isTest
public class AccountTestClass {
    // テストメソッドをここに追加していきます
}

  1. テストメソッドの作成:
@isTest
public class AccountTestClass {
    @isTest
    static void testAccountLogic() {
        // テストメソッドの実装
    }
}
  1. テストデータの作成:
@isTest
public class AccountTestClass {
    @isTest
    static void testAccountLogic() {
        // アカウントレコードの作成
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        // その他のテストデータの作成や設定
    }
}
  1. テストケースの実行:
@isTest
public class AccountTestClass {
    @isTest
    static void testAccountLogic() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        // テスト対象のコードの呼び出し
        // テスト対象のコードに対するアサーション
    }
}

  1. アサーションの使用:
@isTest
public class AccountTestClass {
    @isTest
    static void testAccountLogic() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        // テスト対象のコードの呼び出し
        // 例: ロジックが正しく動作していることを確認するアサーション
        System.assertEquals('Expected Value', acc.CustomField__c);
    }
}
  1. テストクラスの実行:
@isTest
public class AccountTestClass {
    @isTest
    static void testAccountLogic() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        Test.startTest();
        // テスト対象のメソッドの呼び出し
        AccountClass.myMethod(acc.Id);
        // 例: カスタムロジックを実行するメソッドの呼び出し
        Test.stopTest();
        // 結果の検証
        // 非同期処理の結果を検証するため、Test.stopTest() の後にアサーションを記述
        Contact contact = [SELECT Id FROM Contact WHERE AccountId = :acc.Id LIMIT 1];
        System.assertNotEquals(null, contact);
    }
}

Test.startTest()Test.stopTest() メソッドは

テストメソッド内で Test.startTest() を呼び出し、その後のコードを Test.startTest()Test.stopTest() の間に配置することで、以下のようなテストのフローを実現できます。

  1. Test.startTest() の呼び出し:
  • Test.startTest() メソッドを呼び出すことで、テストの実行コンテキストが開始されます。この時点で、トランザクションが開始され、クエリリセットとクエリカウントの制限がリセットされます。
  1. テストデータの作成:
  • Test.startTest() の後に、必要なテストデータを作成します。これには、テスト対象のオブジェクトや関連レコードの作成などが含まれます。
  1. テスト対象のコードの実行:

テスト対象のコードを呼び出し、実行します。これには、Apex クラスやトリガーのメソッドの呼び出し、DML 操作、非同期プロセスの起動などが含まれます。

  1. Test.stopTest() の呼び出し:
  • Test.stopTest() メソッドを呼び出すことで、非同期プロセスやバッチ処理の実行をトリガーします。これにより、テスト実行中の非同期プロセスやバッチ処理が同期的に実行され、その結果が利用可能になります。
  1. 結果の検証:
  • Test.stopTest() の後に、アサーションを使用してテスト結果を検証します。これにより、テスト対象のコードが期待どおりの結果を生成するかを確認できます

Test.startTest()Test.stopTest() の組み合わせは、非同期プロセスやバッチ処理の実行を同期化し、テストの結果を正確に検証するための重要な手法です。この方法を使用することで、非同期操作の完了を待機し、その結果をテスト内でアサーションできます