【问题标题】:How do I get SonarQube to analyse Code Smells in unit tests but not count them for coverage reports?如何让 SonarQube 分析单元测试中的代码气味,但不将它们计入覆盖率报告?
【发布时间】:2018-11-04 02:29:28
【问题描述】:

我正在使用商业 SonarQube 插件分析 C++ 项目。

在我看来,我的项目有一个人为的高代码覆盖率报告,因为“生产”源代码行和单元测试代码行都被计算在内。编写许多不作为单元测试的一部分运行的单元测试代码行是相当困难的,因此它们可以立即提高覆盖率报告。

是否仍然可以对单元测试代码进行代码异味分析,但不计入测试覆盖率指标?

我已经尝试设置sonar.tests=./Tests 参数(其中 ./Tests 是我的测试代码所在的目录。这似乎将测试代码排除在所有分析之外,从而无法检测到气味。我宁愿检查测试代码是否属于质量好于希望它遵守适用于项目的规则。

我尝试将sonar.test.inclusions=./Tests/* 与上述内容结合使用。但是,我要么文件路径语法不正确,要么设置此变量导致测试代码完全省略,因此它根本不再出现在“代码”选项卡下,也被排除在外。

documentation on Narrowing the Focus of what is analysed 并不是很清楚预期的行为是什么,至少对我来说是这样。任何帮助将不胜感激,因为通过每个排列都会非常混乱。

也许我应该接受这样的想法,即使用约 300 行“生产”代码和 900 行存根、模拟和单元测试,75% 的测试覆盖率值可能意味着运行 0 行“生产”代码。我检查了一下,目前,我非常简单的应用程序的测试代码与“生产”代码的比率大约是这个比例。我预计随着时间的推移,这个比例会更接近 50:50,但它可能不会。

【问题讨论】:

  • 非常有趣的问题。您使用的是哪个代码覆盖框架?我知道 JaCoco 与 SonarQube 配合得很好
  • @RannLifshitz 我正在使用lcovgenhtlm,我也尝试过gcov。 JaCoco 只是 Java,不是吗?
  • JaCoco 仅是 Java:jacoco.org/jacoco/trunk/index.html 我会尝试找到一个 C++ 等价物。这就是我用谷歌搜索的:groups.google.com/forum/#!topic/jacoco/VBqOihjluME
  • @RannLifshitz 我确实有代码覆盖率报告工作。它限制了 SonarQube 对什么是测试代码和什么是我遇到问题的生产代码的解释。假设一个框架可以处理这个问题,但是我必须确保该框架能够处理我目前用于测试本身的 CppUTest 单元测试框架。
  • 我需要更彻底地调查这个问题。如果您想离线与我联系,我会向您发送我的电子邮件。

标签: unit-testing sonarqube metrics software-quality


【解决方案1】:

我发现的一个解决方案是为一个存储库设置两个单独的 SonarQube 项目。第一个以正常方式设置,通过sonar.tests=./Tests 排除测试代码。第二次你创建了一个 -test 存储库,你在其中排除了所有生产代码。

这增加了一些管理和设置,但保证正常项目的覆盖率仅占生产代码的百分比,并且您对所有测试代码执行了 SonarQube 分析(也可以跟踪覆盖率,并且预计将非常高)。

我很难记住很久以前我在哪里找到了这个建议。可能在SonarQube Community Forum 的某个地方,如果您遇到问题,值得一看。

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 2015-11-08
    • 1970-01-01
    • 2017-03-23
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2018-10-18
    相关资源
    最近更新 更多