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

No Results

Search Tips:

  • Please consider misspellings
  • Try different search keywords

テストクラスの追加

前提条件:
  • Sandbox の Performance EditionUnlimited Edition、または Enterprise Edition 組織の Salesforce アカウント、または Developer Edition 組織のアカウント。
  • HelloWorldTrigger Apex トリガ

このステップでは、1 つのテストメソッドを持つテストクラスを追加します。また、テストを実行して、コードカバー率を検証します。テストメソッドはトリガとクラスのコードを実行して検証します。また、トリガとクラスのコードカバー率が 100% に達するようにします。

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

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

メモ

  1. [設定] から [開発] | [Apex クラス] をクリックし、[新規] をクリックします。
  2. クラスエディタで、このテストクラスの定義を追加し、[保存] をクリックします。
    1swfobject.registerObject("clippy.codeblock-0", "9");@isTest 
    2private class HelloWorldTestClass {
    3    static testMethod void validateHelloWorld() {
    4       Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100);
    5       System.debug('Price before inserting new book: ' + b.Price__c);
    6
    7       // Insert book
    8       insert b;
    9    
    10       // Retrieve the new book
    11       b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id];
    12       System.debug('Price after trigger fired: ' + b.Price__c);
    13
    14       // Test that the trigger correctly updated the price
    15       System.assertEquals(90, b.Price__c);
    16    }
    17}
    18

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

    メソッド validateHelloWorldtestMethod として定義されます。つまり、データベースに変更が行われると、実行の完了時に自動的にロールバックされ、テストメソッドで作成されたテストデータを削除する必要はありません。

    まず、テストメソッドは新しいブックを作成し、データベースに一時的に挿入します。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 を使用して新たに挿入されたブックを取得し、トリガによって変更された新しい価格を記録します。

    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. [実行] をクリックしてテストを実行します。
    [Tests (テスト)] タブにテスト結果が表示されます。必要に応じて、[Tests (テスト)] タブのテストクラスを展開して、実行されたメソッドを確認できます。この場合、クラスには 1 つのテストメソッドのみが含まれます。
  7. [Overall Code Coverage (全体のコードカバー率)] ペインに、このテストクラスのコードカバ��率が表示されます。このテストでカバーされたトリガ内のコードの行 (100%) を表示するには、[HelloWorldTrigger] のコードカバー率行をダブルクリックします。また、トリガは MyHelloWorld クラスからメソッドをコールするため、このクラスにもカバー率 (100%) があります。クラスのカバー率を表示するには、[MyHelloWorld] をダブルクリックします。
  8. [Logs (ログ)] タブのログリストで最新のログ行をダブルクリックして、ログファイルを開きます。実行ログが表示されます。このログには、トリガイベント、applyDiscount クラスメソッドへのコール、およびトリガ前後の価格のデバッグ出力に関するログ情報が含まれます。
ここまでで、Apex コードを記述して開発環境でテストを実行するために必要なすべてのステップを完了しました。実際に、コードを十分にテストして満足できる結果が得られたら、他の要件のコンポーネントと共にコードを本番組織にリリースできます。次のステップでは、コードと作成したカスタムオブジェクトを本番組織にリリースする方法を説明します。