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

コードカバー率のベストプラクティス

コードカバー率について、次のヒントとベストプラクティスを考慮してください。

コードカバー率の一般的なヒント

  • コードカバー率の数値を更新するには、テストを実行します。テストを再実行しない限り、組織で Apex コードを更新してもコードカバー率の数値は更新されません。
  • 最後のテスト実行後に組織が更新された場合、コードカバー率の推定値が正しくないことがあります。正しい推定値を取得するには、Apex テストを再実行します。
  • 組織の全体的なコードカバー率には、管理パッケージクラスのカバー率は含まれません。唯一の例外は、管理パッケージテストによってトリガが実行された場合です。詳細は、「管理パッケージテスト」を参照してください。
  • カバー率は、組織の合計コード行数に基づいています。コード行を追加または削除するとカバー率が変更されます。たとえば、組織にテストメソッドでカバーされるコードが 50 行あるとします。テストでカバーされない 50 行のコードがあるトリガを追加した場合、コードカバー率は 100% から 50% に低下します。このトリガにより組織の合計コード行は 50 から 100 に増えますが、テストでカバーされるのはそのうち 50 行のみです。

Sandbox 組織と本番組織でコードカバー率の数値が異なる理由

Apex を本番組織にリリースするか、パッケージの一部として Salesforce AppExchange にアップロードすると、対象組織でローカルテストが実行されます。Sandbox 環境と本番環境に含まれているデータとメタデータが同じとは限らないため、コードカバー率の結果は必ずしも一致しません。本番組織のコードカバー率が 75% 未満の場合は、コードをリリースまたはアップロードできるようにカバー率を引き上げてください。開発環境または Sandbox 環境と本番環境でコードカバー率の数値に不一致が発生する一般的な理由を次に示します。この情報は、これらの相違をトラブルシューティングおよび調整するのに役立ちます。

テストの失敗
1 つの環境でテスト結果が異なると、全体的なコードカバー率が一致しません。Sandbox 環境と本番環境でコードカバー率の数値を比較する前に、組織でリリースまたはパッケージ化するコードがすべてのテストに合格することをまず確認します。リリースまたはパッケージのアップロードを行う前に、コードカバー率の計算に影響するすべてのテストに合格する必要があります。
データの連動関係
テストで @isTest(SeeAllData=true) アノテーションを使用して組織データにアクセスすると、組織で使用可能なデータによってはテスト結果が異なることがあります。テストで参照されるレコードが存在しないか変更されている場合、テストが失敗するか、Apex メソッドで別のコードパスが実行されます。組織データにアクセスする代わりに、テストデータを作成するようにテストを変更してください。
メタデータの連動関係
ユーザのプロファイル設定などのメタデータを変更すると、テストが失敗するか、別のコードパスが実行されることがあります。Sandbox 組織と本番組織でメタデータが一致することを確認するか、メタデータの変更が原因でテスト実行の動作に差異が生じないことを確認してください。
管理パッケージテスト
すべての Apex テストが開発者コンソールなどのユーザインターフェースで実行された後に計算されたコードカバー率は、リリースで取得されたコードカバー率と異なる場合があります。管理パッケージテストを含む、すべてのテストをユーザインターフェースで実行しても、組織の全体的なコードカバー率に管理パッケージコードのカバー率は含まれません。管理パッケージテストでは管理パッケージのコード行がカバーされますが、このカバー率は合計行およびカバーされる行として組織のコードカバー率計算に含まれません。一方で、RunAllTestsInOrg テストレベルによってすべてのテストが実行された後にリリースで計算されるコードカバー率には、管理パッケージコードのカバー率が含まれます。RunAllTestsInOrg テストレベルによってリリースで管理パッケージテストを実行する場合、このリリースを最初に Sandbox で実行するか、検証リリースを実行してコードカバー率を確認することをお勧めします。
コードカバー率全体が 75% 未満になるリリース
カバー率が 100% の新しいコンポーネントを本番組織にリリースする場合、新しいコードと既存のコードの平均カバー率がしきい値である 75% に達しないと、リリースに失敗します。対象組織でのテスト実行から返されるカバー率が 75% 未満の場合は、既存のテストメソッドを変更するか、追加のテストメソッドを記述して、コードカバー率を 75% 以上に引き上げてください。変更済みまたは新規のテストメソッドは、個別にリリースするか、カバー率が 100% の新しいコードと一緒にリリースします。
本番組織のコードカバー率の 75% 未満への低下
コンポーネントを Sandbox 組織からリリースしたときにコードカバー率が 75% 以上であっても、本番組織ではコードカバー率全体が 75% 未満に低下することがあります。組織のデータおよびメタデータと連動関係があるテストメソッドは、コードカバー率の低下の原因となる可能性があります。連動テストメソッドの結果を変えるような変更がデータおよびメタデータに加えられていると、一部のメソッドに失敗したり、異なる動作をしたりすることがあります。その場合、特定の行がカバーされなくなります。

本番組織のコードカバー率の数値を一致させるために推奨されるプロセス

  • 本番リリースへのステージング Sandbox 環境として Full Sandbox を使用します。Full Sandbox は、本番環境のメタデータとデータを模倣し、2 つの環境間でコードカバー率の数値の差を小さくするのに役立ちます。
  • Sandbox 組織と本番組織のデータの連動関係を減らすには、Apex テストでテストデータを使用します。
  • コードカバー率が十分でないために本番組織へのリリースに失敗する場合は、他のテストを作成して、コードカバー率全体をできるだけ高い値または 100% に引き上げます。リリースを再試行します。
  • Sandbox でのコードカバー率を引き上げても本番組織へのリリースに失敗する場合は、本番組織からローカルテストを実行します。コードカバー率が 75% 未満のクラスを特定します。Sandbox でそれらのクラスに対して追加のテストを記述してコードカバー率を引き上げます。