Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法为我的gradle多项目+;实现声纳中100%的代码覆盖率;java+;groovy+;三叶草+;声纳库贝_Java_Gradle_Groovy_Sonarqube_Code Coverage - Fatal编程技术网

无法为我的gradle多项目+;实现声纳中100%的代码覆盖率;java+;groovy+;三叶草+;声纳库贝

无法为我的gradle多项目+;实现声纳中100%的代码覆盖率;java+;groovy+;三叶草+;声纳库贝,java,gradle,groovy,sonarqube,code-coverage,Java,Gradle,Groovy,Sonarqube,Code Coverage,我创建了一个包含源代码、测试和配置的简单场景。我无法使我当前的设置在Sonar中达到100%的代码覆盖率,即使它应该达到。(链接到具有源的存储库-) 这有点复杂-它是Gradle多项目,源代码和测试混合在java和groovy中 测试与源类在同一个模块中,有时测试在“通用”测试模块(我们称之为集成测试模块)中,相应的源位于它们的模块中(在这个简单的例子中是在模块source_module_one和source_module_two中) 有些源代码是用Java编写的,Groovy测试涵盖了这些源

我创建了一个包含源代码、测试和配置的简单场景。我无法使我当前的设置在Sonar中达到100%的代码覆盖率,即使它应该达到。(链接到具有源的存储库-)

  • 这有点复杂-它是Gradle多项目,源代码和测试混合在java和groovy中
  • 测试与源类在同一个模块中,有时测试在“通用”测试模块(我们称之为集成测试模块)中,相应的源位于它们的模块中(在这个简单的例子中是在模块source_module_one和source_module_two中)
  • 有些源代码是用Java编写的,Groovy测试涵盖了这些源代码,反之亦然

在花了很多时间之后,我无法在本地Sonar中看到100%的代码覆盖率。如果能帮助我达到100%代码覆盖率的目标,我将不胜感激。我的项目结构是否可能?是否有其他覆盖率插件?

首先,您肯定应该重新考虑在与源代码相同的目录中进行测试。只是为了将来的san为了方便起见,我会将测试隔离在不同的目录中。此外,如果您的测试与源代码在一起,那么它们将被视为源文件。因此,您需要对您的测试进行测试,并对您的测试进行测试,…无限期

除此之外,100%的覆盖率是圣杯的追求。保持高标准是一件好事,但在某一点上你达到了收益递减规律。相反,我将要求设置为…90%?92%?95%?

  • 基本上,我们在这里解决的是典型的单元测试/集成测试场景。您的模块中有单元测试,但您有另一个运行集成测试的模块/项目,您希望看到组合覆盖率
  • 这在SonarQube 6.2+中可以很容易地解决,因为它引入了新的属性
    sonar.jacoco.reportpath
    ——它接受多个报告文件并合并它们
  • 在SonarQube的较低版本中,您可能需要使用
    jacoComge
    将单元测试和集成测试报告文件合并为一个。在我们的项目中,我添加了以下任务:

    任务jacocoMerge(类型:jacocoMerge){ 子项目{子项目-> executionData文件树(subproject.buildDir).include(“/jacoco/*.exec”) } }


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

100%覆盖率-我想说的是,所有演示类都包含在测试中re我期望100%的覆盖率在这个演示案例中,这是正确的期望。在真实的项目中,这就像你写的。为什么测试和源类不在同一个文件夹/模块中?因为在这个案例中,测试非常简单,但在我们的真实案例中,只有一个测试(集成)正在覆盖/测试来自不同模块的更多类。这个愚蠢的演示案例只是为了看看哪些类似乎被测试发现。组合java groovy(反之亦然)在不同的模块中测试,而不是在源文件中测试…这些的组合…@sion见我的扩展。