function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Kazuki KawamuraKazuki Kawamura 

sandboxから本番環境移行時の検証にて生じるコードカバー率エラー

お世話になっております。

表題の件についてご教示頂きたく思い、質問させて頂きました。

現在、ある1つのクラスのデプロイを試みています。
sandbox環境でテストを実行すると、コードカバー率が88%なのですが本番環境の検証では、66%となりコードカバー率エラーとなります。
テストコードを変更して、sandbox環境でのコードカバー率が77%や0%になった場合にも、本番環境の検証のコードカバー率は66%のままです。

本番環境の検証の際のコードカバー率とは、私が作成したテストクラスでのコードカバー率とは別物なのでしょうか。

もし、ご存知でしたら教えて頂けたら幸いです。
Best Answer chosen by Kazuki Kawamura
Tomonori Akatsu 3Tomonori Akatsu 3

こんにちは。
本番へのデプロイは全テスト結果のコードカバー率が75%以上でないとデプロイができません。
Sandboxのコードカバー率はテストクラス実行後の該当クラス単体で88%でしょうか?
Sandbox組織の全体テストコードカバー率で88%でしょうか?

前者でしたら、他のテストクラスが原因で全体カバー率が下がっている可能性があります。
・Sandboxと本番の全クラス、テストクラスが同じものであるか
・SandboxのApexテスト実行で全テストクラスを実行したコードカバー率が75%以上か確認

後者でしたら
・テストクラスもデプロイされているか
・検証で該当テストが実行されているか(エラーになっていないか)

をご確認ください。
また、Sandboxで頻繁にテストを実行しているとまれに正しいコードカバー率にならない事が過去ありました。
一度履歴等をクリーンアップして再実行する事をお勧めします。
設定>開発>Apexテスト実行>テスト履歴を表示>テストデータをクリア

All Answers

Rahul KumarRahul Kumar (Salesforce Developers) 
Hi Kazuki,
  • Please note that if the apex code and the test class have 100% code coverage and you are still unable to deploy it in production due to low code coverage. It means that the overall code coverage of other existing components (trigger and classes) in production is below 75% and the deployment will not be successful.

To avoid this: Please refer the below link for reference. I hope it will be helpful.

Please mark it as best Answer if the information is informative.

BestRegards
RahulKumar
Taiki YoshikawaTaiki Yoshikawa
まず本番環境とSandbox環境で同期が取れていないことがあります。そのためSandbox環境で問題なかった部分が本番環境だとうまく動かないということが発生します。

またリリースしようとしたクラスのテストカバー率が低い場合、それによって本番環境のカバー率が下がることがあります。

今回の件には影響なかったと思いますがまれに組織のカバー率が正しく表示されないことがあります。設定のApexテストですべてのテストを実行を行うと正しいカバー率が表示されるようになったと思います。(たしか開発者コンソールのすべてのテスト実行ではだめだったと思います。)
Kazuki KawamuraKazuki Kawamura
Thank Kumar so much for your reply.
 
Let me ask 2 questions for your answer, “apex code and the test class have 100% code coverage”
  1. You mean the test class also has to be tested so I have to write another test class for the test class?
  2. The APEX class I want to deploy has just 88% code coverage (more than 75%), so do I have to make the code coverage reach 100%? Actually it’s hard to raise the code coverage because I often use throw statement.
 
Can I check the overall code coverage of other existing components in production?
 
Thank you for giving me the link but I cannot see because of 404.
Can you send again?
 
Kazuki KawamuraKazuki Kawamura
ご返答ありがとうございます。
 
>まず本番環境とSandbox環境で同期が取れていないことがあります。
申し訳ありません、同期がとれていないとはどういった意味でしょうか。
添付した図の通り、緑色の矢印が現れたら同期が取れているという理解で宜しいでしょうか。
 
>またリリースしようとしたクラスのテストカバー率が低い場合、それによって本番環境のカバー率が下がることがあります。
ありがとうございます。今回リリースしようとしたクラス(APEXクラス1)のコードカバー率は、88%なので大丈夫だと考えているのですがsandboxでのテストカバー率とデプロイ時のテストカバー率は違うものなのでしょうか。
 
何度も質問して恐縮ですが、ご教示頂けたら幸いです。
Kazuki KawamuraKazuki Kawamura
User-added imageUser-added image
Tomonori Akatsu 3Tomonori Akatsu 3

こんにちは。
本番へのデプロイは全テスト結果のコードカバー率が75%以上でないとデプロイができません。
Sandboxのコードカバー率はテストクラス実行後の該当クラス単体で88%でしょうか?
Sandbox組織の全体テストコードカバー率で88%でしょうか?

前者でしたら、他のテストクラスが原因で全体カバー率が下がっている可能性があります。
・Sandboxと本番の全クラス、テストクラスが同じものであるか
・SandboxのApexテスト実行で全テストクラスを実行したコードカバー率が75%以上か確認

後者でしたら
・テストクラスもデプロイされているか
・検証で該当テストが実行されているか(エラーになっていないか)

をご確認ください。
また、Sandboxで頻繁にテストを実行しているとまれに正しいコードカバー率にならない事が過去ありました。
一度履歴等をクリーンアップして再実行する事をお勧めします。
設定>開発>Apexテスト実行>テスト履歴を表示>テストデータをクリア

This was selected as the best answer
Kazuki KawamuraKazuki Kawamura
ご返答ありがとうございます。
 
>Sandboxのコードカバー率はテストクラス実行後の該当クラス単体で88%でしょうか?
全クラス(overall)のコードカバー率は、80%で該当クラス単体が88%です。
 
>テストクラスもデプロイされているか
本番環境にテストクラスをデプロイしないといけないのですね。
勉強不足で、申し訳ありません。テストクラスを本番環境にデプロイしておりませんでした。
 
テストクラスと共にデプロイすると、他のエラーが表示されましたがコードカバー率の問題は解決しました。
 
みなさま、本当にありがとうございました。