【问题标题】:Gradle Jacoco Plugin Reporting Zero CoverageGradle Jacoco 插件报告零覆盖
【发布时间】:2015-08-03 16:00:16
【问题描述】:

在运行 Gradle 的 Jacoco 插件时,我在一组选定的类上报告了零代码覆盖率。我已经确认测试这些类的所有单元测试都已成功运行。

非常有趣的是,Eclipse 中的 EclEmma 会生成正确的代码覆盖率结果。我已经确认这两个工具都使用相同版本的 Jacoco。

我想弄清楚这两种工具之间的区别是什么?我需要额外配置 Gradle Jacoco 插件吗?

编辑:我的 Gradle Jacoco 输出显示“com/.... 类的执行数据不匹配”

更新:我在 Eclipse 中打开了 Jacoco 生成的 test.exec 文件。它显示了具有缺失覆盖率的类,它们执行了 80% 的探测。

【问题讨论】:

    标签: java gradle code-coverage jacoco eclemma


    【解决方案1】:

    这可能意味着 jacoco 插件在 gradle 中没有正确配置。 在这里您可以找到 Jacoco 和 gradle 的常见错误清单(感谢 Taeho Kim 的明确回答):https://stackoverflow.com/a/23965581/2166900

    另外,这是我在上一个 Android 项目中使用的配置,对我有用:

    apply plugin: 'jacoco'
    
    jacoco {
        toolVersion = "0.7.2.+"
    }
    
    def coverageSourceDirs = [
            'src/main/java'
    ]
    
    task jacocoTestReport(type:JacocoReport, dependsOn: "testDebug") {
        group = "Reporting"
    
        description = "Generate Jacoco coverage reports"
    
        classDirectories = fileTree(
                dir: 'build/intermediates/classes/debug',
                excludes: ['**/R.class',
                           '**/R$*.class',
                           '**/*$ViewInjector*.*',
                           '**/BuildConfig.*',
                           '**/Manifest*.*']
        )
    
        additionalSourceDirs = files(coverageSourceDirs)
        sourceDirectories = files(coverageSourceDirs)
        executionData = files('build/jacoco/testDebug.exec')
    
        reports {
            xml.enabled = false
            html.enabled = true
        }
    }
    

    【讨论】:

    • 不幸的是,这不起作用。我应该澄清这些文件确实出现在报告中;但是,它们显示没有代码被命中。 EclEmma 确实显示了被命中的代码。我想知道这是否是 Gradle Jacoco 插件的 Java 8 问题。有问题的文件都使用 Java 8 流。谢谢
    • 对不起,我误读了这个问题,我认为没有一个类显示代码覆盖率。您确实使用了 Jacoco 0.7.2 或更高版本吗?那时他们添加了对 lambda 表达式的支持。这是 Jacoco 的更新日志:eclemma.org/jacoco/trunk/doc/changes.html
    • 是的,我们使用的是 0.7.5。我们刚刚尝试从 lambda 转换为双冒号,这解决了问题。最新版本的 jacoco 应该可以处理 lambda,所以我不确定问题出在哪里。我在 Gradle 论坛上发帖,所以我会看看他们怎么说。谢谢!
    【解决方案2】:

    我在切换到 gradle wrapper 时遇到了同样的问题,但我一直在用 gradle 运行 jacoco。使用 gradle wrapper 运行 jacoco 解决了这个问题。

    This stackoverflow accepted answer 帮助我弄清楚我错过了什么。

    【讨论】:

      【解决方案3】:

      还要检查单元测试是否实际运行。如果你有 Junit5 的 jar hell,它可能会默默地失败。添加--info 并检查错误消息。

      【讨论】:

        【解决方案4】:

        我遵循了这个媒体指南:

        https://medium.com/codex/software-engineering-done-right-2358ae0d6dd4

        在 test/jacoco 中我添加了 include 参数和我的包,像这样

        test{
            ...
            jacoco {
                destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
                includes= ["it.funds.*"]
                classDumpDir = file("$buildDir/jacoco/classpathdumps")
            }
            ...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-14
          • 2018-12-18
          • 1970-01-01
          • 1970-01-01
          • 2016-12-11
          • 1970-01-01
          • 2013-06-27
          相关资源
          最近更新 更多