テストクラスの追加
- Sandbox の Performance Edition、Unlimited Edition、または Enterprise Edition 組織の Salesforce アカウント、または Developer Edition 組織のアカウント。
- HelloWorldTrigger Apex トリガ
このステップでは、1 つのテストメソッドを持つテストクラスを追加します。また、テストを実行して、コードカバー率を検証します。テストメソッドはトリガとクラスのコードを実行して検証します。また、トリガとクラスのコードカバー率が 100% に達するようにします。
- [設定] から をクリックし、[新規] をクリックします。
-
クラスエディタで、このテストクラスの定義を追加し、[保存] をクリックします。
1swfobject.registerObject("clippy.codeblock-0", "9"); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17@isTest 18 19private class HelloWorldTestClass { 20 21 static testMethod void validateHelloWorld() { 22 23 Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100); 24 25 System.debug('Price before inserting new book: ' + b.Price__c); 26 27 28 29 // Insert book 30 31 insert b; 32 33 34 35 // Retrieve the new book 36 37 b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id]; 38 39 System.debug('Price after trigger fired: ' + b.Price__c); 40 41 42 43 // Test that the trigger correctly updated the price 44 45 System.assertEquals(90, b.Price__c); 46 47 } 48 49} 50 51このクラスは、@isTest アノテーションを使用して定義されています。こうして定義されたクラスには、テストメソッドのみが含まれます。テスト用に個別のクラスを作成することの利点の 1 つは、isTest で定義されたクラスは、すべての Apex コードに対して組織で設定された 3 MB の制限の対象としてカウントされないことです。@isTest アノテーションを個別のメソッドに追加することもできます。詳細は、「IsTest アノテーション」および「実行ガバナと制限について」を参照してください。
メソッド validateHelloWorld は testMethod として定義されます。つまり、データベースに変更が行われると、実行の完了時に自動的にロールバックされ、テストメソッドで作成されたテストデータを削除する必要はありません。
まず、テストメソッドは新しいブックを作成し、データベースに一時的に挿入します。System.debug ステートメントによって、デバッグログに価格の値が書き込まれます。
1Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100); 2 3System.debug('Price before inserting new book: ' + b.Price__c); 4 5 6 7// Insert book 8 9insert b;ブックが挿入されると、コードは、挿入時にブックに割り当てられた ID を使用して新たに挿入されたブックを取得し、トリガによって変更された新しい価格を記録します。
1// Retrieve the new book 2 3b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id]; 4 5System.debug('Price after trigger fired: ' + b.Price__c);MyHelloWorld クラスが実行されると、Price__c 項目が更新され、値が 10% 減少します。次の行は実際のテストで、メソッド applyDiscount が実際に実行され、予想どおりの結果が得られたことを検証します。
1// Test that the trigger correctly updated the price 2 3System.assertEquals(90, b.Price__c); -
次に、開発者コンソールに切り替えてこのテストを実行し、コードカバー率情報を確認します。 をクリックします。開発者コンソールウィンドウが開きます。
- 開発者コンソールで、 をクリックします。
- テストクラスを追加するには、[HelloWorldTestClass] をクリックし、[>] をクリックします。
-
[実行] をクリックしてテストを実行します。
[Tests (テスト)] タブにテスト結果が表示されます。必要に応じて、[Tests (テスト)] タブのテストクラスを展開して、実行されたメソッドを確認できます。この場合、クラスには 1 つのテストメソッドのみが含まれます。
- [Overall Code Coverage (全体のコードカバー率)] ペインに、このテストクラスのコードカバー率が表示されます。このテストでカバーされたトリガ内のコードの行 (100%) を表示するには、[HelloWorldTrigger] のコードカバー率行をダブルクリックします。また、トリガは MyHelloWorld クラスからメソッドをコールするため、このクラスにもカバー率 (100%) があります。クラスのカバー率を表示するには、[MyHelloWorld] をダブルクリックします。
- [Logs (ログ)] タブのログリストで最新のログ行をダブルクリックして、ログファイルを開きます。実行ログが表示されます。このログには、トリガイベント、applyDiscount クラスメソッドへのコール、およびトリガ前後の価格のデバッグ出力に関するログ情報が含まれます。