テストクラスの追加
このステップでは、1 つのテストメソッドを持つテストクラスを追加します。また、テストを実行して、コードカバー率を検証します。テストメソッドはトリガとクラスのコードを実行して検証します。また、トリガとクラスのコードカバー率が 100% に達するようにします。
前提条件:
- Sandbox の Professional Edition、Enterprise Edition、Performance Edition、または Unlimited Edition 組織の Salesforce アカウント、または開発者組織のアカウント。
- HelloWorldTrigger Apex トリガ。
- [設定] から、[Quick Find (クイック検索)] ボックスに「Apex Classes (Apex クラス)」と入力し、[Apex Classes (Apex クラス)] を選択して、[New (新規)] をクリックします。
-
クラスエディタで、このテストクラスの定義を追加し、[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 アノテーションを使用して定義されています。このアノテーションは、データベースに変更が行われても、実行の完了時にロールバックされることを示します。テストメソッドで作成したテストデータは削除する必要がありません。
まず、テストメソッドはブックを作成し、データベースに一時的に挿入します。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); - このテストを実行し、コードカバー率情報を確認するために、開発者コンソールに切り替えます。
- 開発者コンソールで、 をクリックします。
- テストクラスを選択するには、[HelloWorldTestClass] をクリックします。
- HelloWorldTestClass クラスのすべてのメソッドをテスト実行に追加するには、[Add Selected (選択された項目を追加)] をクリックします。
-
[Run (実行)] をクリックします。
[Tests (テスト)] タブにテスト結果が表示されます。必要に応じて、[Tests (テスト)] タブのテストクラスを展開して、実行されたメソッドを確認できます。この場合、クラスには 1 つのテストメソッドのみが含まれます。
- [Overall Code Coverage (全体のコードカバー率)] ペインに、このテストクラスのコードカバー率が表示されます。このテストでカバーされたトリガ内のコードの行の割合 (100%) を表示するには、[HelloWorldTrigger] のコードカバー率行をダブルクリックします。トリガは MyHelloWorld クラスからメソッドをコールするため、このクラスにもカバー率 (100%) があります。クラスのカバー率を表示するには、[MyHelloWorld] をダブルクリックします。
- [Logs (ログ)] タブのログリストで最新のログ行をダブルクリックして、ログファイルを開きます。実行ログが表示されます。このログには、トリガイベント、applyDiscount メソッドへのコール、およびトリガ前後の価格に関するログ情報が含まれます。
ここまでで、Apex コードを記述して開発環境でテストを実行するために必要なすべてのステップを完了しました。実際の場合は、コードをテストして満足できる結果が得られたら、他の要件のコンポーネントと共にコードを本番組織にリリースします。次のステップでは、コードと作成したカスタムオブジェクトを本番組織にリリースする方法を説明します。