繁体   English   中英

我的gradle multiproject + Java + groovy +三叶草+ sonarqube无法在声纳中达到100%代码覆盖率

[英]unable to reach 100% code coverage in sonar for my gradle multiproject + java + groovy + clover + sonarqube

我用源,测试和配置创建了一个简单的方案。 我目前无法在Sonar中达到100%的代码覆盖率,即使应该如此。 (链接到资源库-https: //bitbucket.org/sloukam/gradle-multiproject-coverage-sonar/src

  • 这有点复杂-它是Gradle多个项目,用于混合源代码和测试Java和groovy。
  • 测试与源类在同一个模块中,有时测试在“通用”测试模块中(称为集成测试模块),相应的源位于其模块中(在这种简单情况下,模块为source_module_one和source_module_two)。
  • 有些资源是用Java编写的,并且在Groovy测试中涉及,反之亦然。

花了很多时间后,我无法在本地的Sonar中看到100%的代码覆盖率。 我非常感谢帮助实现100%代码覆盖率的目标。 我的项目结构可能吗? 还有其他覆盖插件吗?

首先,您当然应该重新考虑在与源文件相同的目录中进行测试。 出于未来的考虑,我将测试隔离在另一个目录中。 此外,如果您的测试与您的源一起进行,则它们将被视为源文件。 因此,您需要对测试进行测试,并对测试进行测试,...无限制。

但是,除此之外,Grail Quest是100%的覆盖率。 坚持高标准是一件好事,但在某些时候,您违反了收益递减法则。 相反,我将要求设置为... 90%? 92%? 95%?

  • 基本上,我们在这里要解决的是典型的单元测试/集成测试方案。 您的模块中有单元测试,但是您还有另一个运行集成测试的模块/项目,并且您想查看合并的内容
  • 在SonarQube 6.2+中,这很容易解决,因为它引入了新的属性sonar.jacoco.reportPaths它接受多个报告文件并将其合并。
  • 在较低版本的SonarQube中,您可能必须使用JacocoMerge将单元测试报告和集成测试报告文件合并为一个。 在我们的项目中,我添加了以下任务:

    任务jacocoMerge(type:JacocoMerge){子项目{子项目-> executionData fileTree(subproject.buildDir).include(“ / jacoco / *。exec”)}}

生成的报告文件将所有模块上的所有报告合并到projectRoot/build/jacoco/jacocoMerge.exec 现在,您可以将要分析的所有模块的此文件的绝对路径用作sonar.jacoco.reportPath

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM