如何从SonarQube的代码覆盖范围中排除golang测试,结构和常量?

时间:2018-10-24 06:43:06

标签: go sonarqube

SonarQube 7.3内置了对golang的支持,我发现至少有两个问题:-

它不会自动从覆盖范围中排除* _test.go。在单元测试中,它还会选择IP地址,并要求将它们配置为可配置的(不是常量,这也不能解决错误)。

它将struct和const视为未覆盖的行,因此,覆盖范围所占的百分比明显低于go coverage工具本身,这使其成为不好的用例。例如,在一个中等规模的项目中,它报告的覆盖率为40%,而使用工具为70%

除了将它们全部注释为声纳排除对象或将常量和结构放入通用的排除模式文件之外,还有其他可以做的事情吗?有计划在SonarQube的更高版本中解决这些问题吗?

1 个答案:

答案 0 :(得分:1)

目前(SonarQube 7.4),SonarGo分析器不会自动将*_test.go标识为测试文件。这是一项缺少的功能,这就是SonarGo documentation描述如何通过设置正确识别测试文件的原因:

sonar.test.inclusions=**/*_test.go

如果没有正确的测试标识,覆盖范围的结果将是错误的,并且分析结果可能会引发没有意义的问题(例如测试中的硬编码IP地址)。

关于覆盖范围的准确性(对于不是测试文件的文件),有两种情况:

  • 如果文件在覆盖率报告中具有与其相关的条目,则SonarQube中显示的覆盖行应与报告中的行完全匹配,否则,这是一个重大错误。但是go工具显示的 percentage (范围覆盖率)可能与SonarQube显示的百分比(行覆盖率)略有不同,例如:+2%。
  • 如果文件不在覆盖率报告中,SonarGo将根据其对可执行代码行的定义生成0%的覆盖率。如果可执行代码行go test定义有所不同,则该错误将在文件被部分覆盖后消失。

修复这些覆盖错误的最好方法是,通过使用小型代码复制器创建一个Report a Bug主题,在community.sonarsource.com上进行报告。