SonarQube 7.3内置了对golang的支持,我发现至少有两个问题:-
它不会自动从覆盖范围中排除* _test.go。在单元测试中,它还会选择IP地址,并要求将它们配置为可配置的(不是常量,这也不能解决错误)。
它将struct和const视为未覆盖的行,因此,覆盖范围所占的百分比明显低于go coverage工具本身,这使其成为不好的用例。例如,在一个中等规模的项目中,它报告的覆盖率为40%,而使用工具为70%
除了将它们全部注释为声纳排除对象或将常量和结构放入通用的排除模式文件之外,还有其他可以做的事情吗?有计划在SonarQube的更高版本中解决这些问题吗?
答案 0 :(得分:1)
目前(SonarQube 7.4),SonarGo分析器不会自动将*_test.go
标识为测试文件。这是一项缺少的功能,这就是SonarGo documentation描述如何通过设置正确识别测试文件的原因:
sonar.test.inclusions=**/*_test.go
如果没有正确的测试标识,覆盖范围的结果将是错误的,并且分析结果可能会引发没有意义的问题(例如测试中的硬编码IP地址)。
关于覆盖范围的准确性(对于不是测试文件的文件),有两种情况:
go test
定义有所不同,则该错误将在文件被部分覆盖后消失。修复这些覆盖错误的最好方法是,通过使用小型代码复制器创建一个Report a Bug
主题,在community.sonarsource.com上进行报告。