代码覆盖率失败 你的代码覆盖率是 72%。您需要至少 75% 的覆盖率才能完成此部署

Posted

技术标签:

【中文标题】代码覆盖率失败 你的代码覆盖率是 72%。您需要至少 75% 的覆盖率才能完成此部署【英文标题】:Code Coverage Failure Your code coverage is 72%. You need at least 75% coverage to complete this deployment 【发布时间】:2020-07-28 07:16:03 【问题描述】:

我正在开发一个新项目,其中客户预先存在的生产代码的覆盖率低至 72%,因此我无法部署在沙盒中完成的任何工作。

错误:

代码覆盖失败 你的代码覆盖率为 72%。您需要至少 75% 的覆盖率才能完成此部署。

有人对如何增加代码覆盖率有建议吗?

【问题讨论】:

为未发现的代码编写测试。或者只为您在部署时更改的类指定测试。 我的问题是将测试用例投入生产。如果所有更改集选项都失败,我将如何部署它? @TemporaryFix 当你部署到 prod 时,所有本地测试都会运行 谢谢先生们的建议确实有帮助 【参考方案1】:
    在生产环境中编译所有类 运行所有单元测试(本地测试,无需运行托管软件包附带的测试) 转到开发者控制台,查询编辑器,勾选底部的工具 API 复选框

    运行此查询

    SELECT ApexClassorTrigger.Name, NumLinesCovered, NumLinesUncovered
    FROM ApexCodeCoverageAggregate
    ORDER BY NumLinesUncovered DESC
    LIMIT 10
    

它应该让您知道哪些类/触发器被覆盖的最少。其中一些将是快速的胜利,花费在创建/改进他们的测试上的时间将为您提供全面覆盖的最佳结果。我的意思是花 1 小时修复覆盖 100 行中有 60 行的课程比修复 4 行中有 2 行的课程要好。在沙盒中工作,直到你 > 75%

(有可能您的沙盒已过时,有人直接在生产环境中创建了验证规则、必填字段等,而无需部署......这就是为什么我要求在 prod 中编译和运行所有测试)

如果有不再使用的类/方法并且删除它们是安全的——你不能用变更集来做,你需要一个特殊的破坏性部署。现在,您可以将它们注释掉并部署该版本。只需检查这是否对您有益(我的意思是,摆脱旧代码当然很好,更易于维护......但如果它恰好被测试覆盖,您会在脚下开枪)

将创建/更新的测试类添加到变更集,您应该能够将其部署到产品。

【讨论】:

当我运行它时,我得到了异常:INVALID_TYPE: sObject type 'ApexCodeCoverageAggregate' is not supported。 来自开发控制台?确保选中查询编辑器底部的“工具 API”复选框。从 REST API(例如 workbench.developerforce.com -> Utilities -> REST Explorer)然后/services/data/v50.0/tooling/query?q=SELECT+ApexClassorTrigger.Name,+NumLinesCovered,+NumLinesUncovered+FROM+ApexCodeCoverageAggregate+ORDER+BY+NumLinesUncovered+DESC+LIMIT+10

以上是关于代码覆盖率失败 你的代码覆盖率是 72%。您需要至少 75% 的覆盖率才能完成此部署的主要内容,如果未能解决你的问题,请参考以下文章

代码覆盖率达到100%,真的代码就没有问题了吗?

代码覆盖率数据生成失败

强制使用远程库的代码覆盖本地的代码

如何更新 phpunit 6 和代码覆盖率 5

如何在 IAR 中执行单元测试和代码覆盖

使用 Spring Boot 时使用 JaCoCo 代码覆盖率构建 Gradle 多项目失败