6

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

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

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

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

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

4

4 回答 4

2

这可能意味着 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
    }
}
于 2015-05-21T19:59:52.380 回答
0

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

这个 stackoverflow 接受的答案帮助我弄清楚我错过了什么。

于 2016-01-10T10:54:50.937 回答
0

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

于 2019-08-20T13:12:48.073 回答
0

我遵循了这个中等指南:

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")
    }
    ...
}
于 2022-02-18T15:25:00.563 回答