No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
Newer Version Available
コードカバー率のベストプラクティス
コードカバー率について、次のヒントとベストプラクティスを考慮してください。
コードカバー率の一般的なヒント
- コードカバー率の数値を更新するには、テストを実行します。テストを再実行しない限り、組織で Apex コードを更新してもコードカバー率の数値は自動的に更新されません。
- で [組織のコードカバー率を見積る] をクリックすると、最後のテスト実行の結果に基づいてコードカバー率の近似値が表示されます。このボタンをクリックしても、テストは再実行されません。テスト結果が古く、最後のテスト実行後に組織が更新された場合、返された推定値が正しくない可能性があります。正しい推定値を取得するには、Apex テストを再実行します。
- テストを追加せずにメソッドまたはトリガを追加または削除し、すべてのテストを再実行すると、コードカバー率全体が変更されます。カバー率は組織の合計コード行に基づいているため、コード行を追加または削除すると、カバー率が変更されます。たとえば、テストメソッドでカバーされる 50 行のコードがある組織の場合、テストでカバーされない 50 行のコードを含むトリガを追加すると、コードカバー率が 100% から 50% に低下することがあります。このトリガにより組織の合計コード行は 50 から 100 に増えますが、テストでカバーされるのは 50 行のみです。
Sandbox 組織と本番組織でコードカバー率の数値が異なる理由
Apex を本番組織にリリースするか、パッケージの一部として Force.com AppExchange にアップロードすると、対象組織ですべてのテストが実行されます。すべてのテストに合格し、コードカバー率全体が 75% 以上である必要があります。Sandbox 組織 (または開発組織) と本番組織でコードカバー率が一致するのが理想的です。ただし、これらの環境は同じでない (同じデータおよびメタデータが常に含まれているとは限らない) 場合があるため、コードカバー率の結果は必ずしも一致しません。本番組織のコードカバー率が 75% 未満の場合は、コードをリリースまたはアップロードできるようにカバー率を高める措置を実施します。開発環境または Sandbox 環境と本番環境でコードカバー率の数値に不一致が発生する一般的な理由を次に示します。この情報は、これらの相違をトラブルシューティングおよび調整するのに役立ちます。
- テストの失敗
- 1 つの環境でテスト結果が異なると、コードカバー率全体が一致しないことがあります。Sandbox 環境と本番環境でコードカバー率の数値を比較する前に、組織でリリースまたはパッケージ化しようとするコードのすべてのテストに合格することをまず確認します。リリースまたはパッケージのアップロードを行う前に、コードカバー率の計算に影響するすべてのテストに合格する必要があります。
- データの連動関係
- テストで @isTest(SeeAllData=true) アノテーションを使用して組織データにアクセスすると、テストが実行されている組織で使用可能なデータによってはテスト結果が異なることがあります。テストで参照されるレコードが存在しないか変更されている場合、テストに失敗するか、Apex メソッドで別のコードパスが実行される可能性があります。組織データにアクセスする代わりに、テストデータを作成するようにテストを変更してください。
- メタデータの連動関係
- ユーザのプロファイル設定などのメタデータを変更すると、テストで別のコードパスが実行されるか、テストに失敗することがあります。Sanbox 組織と本番組織でメタデータが一致することを確認するか、少なくともメタデータの変更が原因でテスト実行の動作が異なることがないことを確認してください。
- 管理パッケージテスト
- テスト実行後に計算される組織の全体的なコードカバー率には、管理パッケージクラスのカバー率は含まれません。ただし、管理パッケージのテストでは、トリガルールや、他の箇所ではカバーされないコード部分を実行できます。このカバー率は、おおよそのコードカバー率の統計には表示されますが、リリース時には含まれません。
- デフォルトでは、リリースで実行されるのはローカルテストのみで、管理パッケージテストは実行されません。名前空間で絞り込まずに Salesforce ユーザインターフェースですべてのテストの実行を選択すると、ローカルテストおよびすべての管理パッケージテストが実行されます。そのため、リリースで取得されるコードカバー率の結果は、ユーザインターフェースで取得されるものと必ずしも一致しません。テストを実行するときには、ローカル名前空間の一部であるテストを選択して、同じテストが確実に実行されるようにします。
- コードカバー率全体が 75% 未満になるリリース
- カバー率が 100% の新しいコンポーネントを本番組織にリリースする場合、新しいコードと既存のコードの平均カバー率がしきい値である 75% に達しないと、リリースに失敗します。対象組織でのテスト実行から返されるカバー率が 75% 未満の場合は、リリースを開始する前に、既存のテストメソッドを変更するか、追加のテストメソッドを記述して、コードカバー率を 75% 以上に引き上げてください。変更済みまたは新規のテストメソッドは、個別にリリースしても、カバー率が 100% の新しいコードと一緒にリリースしてもかまいません。
- 本番組織のコードカバー率が 75% 未満に下がる理由
- コンポーネントを Sandbox 組織から最初にリリースしたときにコードカバー率が 75% 以上であっても、本番組織ではコードカバー率全体が 75% 未満に低下することがあります。組織のデータおよびメタデータと連動関係があるテストメソッドは、コードカバー率の低下の原因となる可能性があります。連動テストメソッドの結果を変えるような変更がデータおよびメタデータに加えられていると、一部のメソッドに失敗したり、異なる動作をしたりすることがあります。その場合、特定の行がカバーされなくなります。
本番組織のコードカバー率の数値を一致させるために推奨されるプロセス
- 本番リリースに使用されるステージング Sandbox 環境に Full Sandbox を使用して、本番環境のメタデータおよびデータにできるだけ近づけるように模倣します。Full Sandbox を使用すると、2 つの環境でコードカバー率の数値が近づく可能性が高くなります。
- コードカバー率が十分でないために本番組織へのリリースに失敗する場合は、他のテストを作成して、コードカバー率全体をできるだけ高い値または 100% に引き上げるようにします。その後、リリースを再試行します。
- Sandbox でのコードカバー率を引き上げても本番組織へのリリースに失敗する場合は、すべてのテストを本番組織で実行し、コードカバー率が 75% 未満のクラスを特定し、それらのクラスに対して Sandbox で追加テストを作成してコードカバー率をさらに引き上げます。