如何强制代码覆盖率为零?

Posted

技术标签:

【中文标题】如何强制代码覆盖率为零?【英文标题】:How to force code coverage to Zero? 【发布时间】:2018-02-17 13:43:51 【问题描述】:

我有几个没有单元测试用例的 java 项目。当我尝试使用 SonarQube 分析这些项目时,我无法获得单元测试代码覆盖率,因为它没有任何测试用例。根据我的研究,我发现如果没有单元测试用例,我可以强制它显示为零。 official Jacoco Java documentation 提到了sonar.jacoco.reportMissing.force.zero=true

我的 SonarQube 分析将使用 maven 构建和 SonarQube 5.6.6 和 sonar-java 4.11.0.10660 完成。

如何在 maven 中设置此参数,以便在我的覆盖范围内显示为零单元测试用例?

【问题讨论】:

【参考方案1】:

从 6.2 版开始,SonarQube 会在分析器支持行为的情况下自动执行此操作。在该版本之前,该功能的可用性参差不齐且不完全可靠。为获得最佳效果,您应该升级 SonarQube。

也就是说,您可以像这样在分析命令行上设置该属性:

mvn sonar:sonar -Dsonar.jacoco.reportMissing.force.zero=true

或者通过在你的 pom 中设置一个属性,如shown in the docs

2019 年 12 月 16 日更新 大多数语言分析器现在计算Executable Lines,因此覆盖报告中省略的文件无论如何都包含在计算中。但这只有在您提供覆盖率报告时才会生效。没有覆盖率报告 -> 根本没有覆盖率指标。

【讨论】:

谢谢 Ann,但是当我尝试使用给定的命令 [ERROR] Unknown lifecycle phase ".jacoco.reportMissing.force.zero=true". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-i d>[:<plugin-version>]:<goal> 不幸的是,sonar.jacoco.reportMissing.force.zero=trueSonarQube 7.9 开始已被弃用,现在 @g-ann-sonarsource-team

以上是关于如何强制代码覆盖率为零?的主要内容,如果未能解决你的问题,请参考以下文章

如何退出GIT的rebase状态,强制覆盖本地代码

多个 Maven 模块声纳代码覆盖率在 sonarqube 中显示为零

Android - 如何强制孩子覆盖有代码的父方法

如何从 Java 单元测试中捕获或强制执行 REST API 覆盖?

开玩笑覆盖率,所有值为零

如何强制“git pull”覆盖本地文件?