No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
テストメソッドの追加
テストに使用するデータを作成するためのユーティリティクラスを追加してテストメソッドからコールできるようになりました。次はテストメソッドが含まれるクラスを作成しましょう。テストクラスとテストメソッドを追加する手順は、次のとおりです。
- [Repository (リポジトリ)] タブの [Setup Entity Type (設定エンティティ種別)] セクションで、[Classes (クラス)] をクリックし、[New (新規)] をクリックします。
- クラス名として「TestInvoiceStatementDeletion」と入力し、[OK] をクリックします。
- 自動生成されたコードを削除し、次のコードを追加します。
- [Save (保存)] をクリックします。
もうひとこと...
- このクラスは、@isTest アノテーションを使用して定義されています。このアノテーションは、前のレッスンの共通テストユーティリティクラスの定義でも使用されていました。このレッスンでは、このアノテーションを使用してクラスをテストクラスとしてマークし、Apex が実行できるテストメソッドを含めることができるようにします。このアノテーションを使用せずに Apex クラス内にテストメソッドと他のコードを混在させることもできますが、このアノテーションを使用することをお勧めします。
- クラスには 3 つのテストメソッドが含まれます。テストメソッドは、引数を取らない静的な最上位レベルのメソッドです。テストメソッドは、testmethod キーワードまたは @isTest アノテーションを使用して定義されます。次のどちらの宣言形式も有効です。testmethod キーワードを使用したテストメソッドの宣言:@isTest アノテーションを使用したテストメソッドの宣言:
- 次に、このクラス内の各テストメソッドについて説明します。
- TestDeleteInvoiceWithLineItem: このテストメソッドは、トリガが本来の機能を実行しているかどうか、つまり、品目名を含む請求書明細が削除されないようにしているかどうかを確認します。テストファクトリメソッドを使用して品目名を含む請求書明細を作成し、Database.delete Apex メソッドを使用して請求書を削除します。このメソッドが返す Database.DeleteResult オブジェクトは、操作が正常に終了したかどうかを判定し、エラーのリストを取得するために使用できます。テストは isSuccess メソッドをコールして、false が返される (請求書が削除されていない) ことを確認します。
- TestDeleteInvoiceWithoutLineItems: このテストメソッドは、トリガが品目名を含まない請求書明細の削除を阻止しないことを確認します。このテストメソッドは、品目名を含まない請求書明細を挿入してからその請求書明細を削除します。前のメソッドと同様、テストファクトリメソッドをコールしてテストデータを作成してから、delete 操作を行う Database.delete をコールします。このテストは、Database.DeleteResult の isSuccess メソッドが true を返すことを確認します。
- TestDeleteInvoiceWithoutLineItems: この 3 つ目のテストメソッドは、請求書のリストを一括削除します。このテストメソッドは、2 つの請求書明細を含むリストを作成します。最初の請求書明細には 1 つの品目名があり、2 つ目の請求書明細には品目名がありません。削除する請求書明細のリストを渡して Database.delete をコールします。今回は、第 2 パラメータがあります。これは省略可能な Boolean パラメータで、一部の sObject の削除が失敗した場合にすべての sObject に対する delete 操作をロールバックする必要があるかどうかを示します。渡した値は false であるため、失敗した sObject があっても delete DML 操作全体をロールバックするのではなく、エラーが発生しなかった sObject は削除されます。この場合、テストは Database.DeleteResult の isSuccess メソッドをコールして、最初の請求書明細が削除されず、2 つ目の請求書明細が削除されたことを確認します。
- 各テストメソッドは Test.startTest/Test.stopTest ブロック内で delete DML 操作を実行します。各テストメソッドには、このようなブロックを 1 つのみ作成できます。このブロック内で実行されるすべてのコードには、テストの他のコードとは別に、新しいガバナ制限のセットが割り当てられます。これにより、テスト内の他の設定コードと同じ制限を共有しなくなるため、ガバナ制限をテストできます。このテストでは、一度に削除するレコードは 1 件か 2 件で、制限に達することはないためガバナ制限のテストは重要ではありませんが、実際のテストステートメントは Test.startTest/Test.stopTest で囲むことをお勧めします。Test.startTest をコールする前に、前提条件の設定とテストデータ作成を実行し、Test.stopTest の後に検証を含めることができます。Test.stopTest をコールした後に、元のガバナ制限が再び適用されます。