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

テストクラスの追加

このステップでは、1 つのテストメソッドを持つテストクラスを追加します。また、テストを実行して、コードカバー率を検証します。テストメソッドはトリガとクラスのコードを実行して検証します。また、トリガとクラスのコードカバー率が 100% に達するようにします。
前提条件:
  • Sandbox の Professional Edition、Enterprise Edition、Performance Edition、または Unlimited Edition 組織の Salesforce アカウント、または開発者組織のアカウント。
  • HelloWorldTrigger Apex トリガ。

テストは開発プロセスの重要な部分です。Apex をリリースまたは AppExchange 用にパッケージ化する前に、次の条件を満たす必要があります。

  • Apex コードの少なくとも 75% が単体テストでカバーされており、かつすべてのテストが成功している。
  • すべてのトリガについて何らかのテストを行う。
  • すべてのクラスとトリガが正常にコンパイルされる。

次の点に注意してください。

  • 本番組織に Apex をリリースするときに、組織の名前空間内の各単体テストがデフォルトで実行されます。
  • System.debug へのコールは、Apex コードカバー率の対象とはみなされません。
  • テストメソッドとテストクラスは、Apex コードカバー率の対象とはみなされません。
  • Apex コードの 75% が単体テストでカバーされている必要がありますが、カバー率を上げることだけに集中すべきではありません。アプリケーションのすべての使用事例 (正・誤両方の場合や単一データだけでなく複数データの場合) の単体テストを作成するようにしてください。このアプローチにより、75% 以上の単体テストのカバー率を達成できます。

メモ

  1. [設定] から、[Quick Find (クイック検索)] ボックスに「Apex Classes (Apex クラス)」と入力し、[Apex Classes (Apex クラス)] を選択して、[New (新規)] をクリックします。
  2. クラスエディタで、このテストクラスの定義を追加し、[Save (保存)] をクリックします。
    1@IsTest 
    2private class HelloWorldTestClass {
    3    @IsTest
    4    static void validateHelloWorld() {
    5       Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100);
    6       System.debug('Price before inserting new book: ' + b.Price__c);
    7
    8       // Insert book
    9       insert b;
    10    
    11       // Retrieve the new book
    12       b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id];
    13       System.debug('Price after trigger fired: ' + b.Price__c);
    14
    15       // Test that the trigger correctly updated the price
    16       System.assertEquals(90, b.Price__c);
    17    }
    18}

    このクラスは、@IsTest アノテーションを使用して定義されています。こうして定義されたクラスには、テストメソッドと、それらのテストメソッドをサポートするのに必要なメソッドのみが含まれます。テスト用に個別のクラスを作成することの利点の 1 つは、@IsTest で定義されたクラスは、Apex コードに対して組織で設定された 6 MB の制限に含まれないことです。@IsTest アノテーションを個別のメソッドに追加することもできます。詳細は、@IsTest アノテーション」および「実行ガバナと制限」を参照してください。

    メソッド validateHelloWorld は、@IsTest アノテーションを使用して定義されています。このアノテーションは、データベースに変更が行われても、実行の完了時にロールバックされることを示します。テストメソッドで作成したテストデータは削除する必要がありません。

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

    メモ

    まず、テストメソッドはブックを作成し、データベースに一時的に挿入します。System.debug ステートメントによって、デバッグログに価格の値が書き込まれます。

    1Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100);
    2System.debug('Price before inserting new book: ' + b.Price__c);
    3
    4// Insert book
    5insert b;

    ブックが挿入されると、コードは、挿入時にブックに割り当てられた ID を使用して新たに挿入されたブックを取得します。その後、System.debug ステートメントによって、トリガが変更しれた新しい価格が記録されます。

    1// Retrieve the new book
    2b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id];
    3System.debug('Price after trigger fired: ' + b.Price__c);

    MyHelloWorld クラスが実行されると、Price__c 項目が更新され、値が 10% 減少します。次のテストは、メソッド applyDiscount が実行され、予想どおりの結果が得られたことを検証します。

    1// Test that the trigger correctly updated the price
    2System.assertEquals(90, b.Price__c);
  3. このテストを実行し、コードカバー率情報を確認するために、開発者コンソールに切り替えます。
  4. 開発者コンソールで、[Test (テスト)] | [New Run (新規実行)] をクリックします。
  5. テストクラスを選択するには、[HelloWorldTestClass] をクリックします。
  6. HelloWorldTestClass クラスのすべてのメソッドをテスト実行に追加するには、[Add Selected (選択された項目を追加)] をクリックします。
  7. [Run (実行)] をクリックします。
    [Tests (テスト)] タブにテスト結果が表示されます。必要に応じて、[Tests (テスト)] タブのテストクラスを展開して、実行されたメソッドを確認できます。この場合、クラスには 1 つのテストメソッドのみが含まれます。
  8. [Overall Code Coverage (全体のコードカバー率)] ペインに、このテストクラスのコードカバー率が表示されます。このテストでカバーされたトリガ内のコードの行の割合 (100%) を表示するには、[HelloWorldTrigger] のコードカバー率行をダブルクリックします。トリガは MyHelloWorld クラスからメソッドをコールするため、このクラスにもカバー率 (100%) があります。クラスのカバー率を表示するには、[MyHelloWorld] をダブルクリックします。
  9. [Logs (ログ)] タブのログリストで最新のログ行をダブルクリックして、ログファイルを開きます。実行ログが表示されます。このログには、トリガイベント、applyDiscount メソッドへのコール、およびトリガ前後の価格に関するログ情報が含まれます。
ここまでで、Apex コードを記述して開発環境でテストを実行するために必要なすべてのステップを完了しました。実際の場合は、コードをテストして満足できる結果が得られたら、他の要件のコンポーネントと共にコードを本番組織にリリースします。次のステップでは、コードと作成したカスタムオブジェクトを本番組織にリリースする方法を説明します。