Gradle Jacoco - 找不到方法jacocoTestReport()

时间:2017-05-09 13:34:56

标签: java android gradle jacoco

我正在尝试在Gradle中生成Jacoco测试报告。当我尝试同步我的代码时,我将收到以下错误:

  

错误:(56,0)无法在类型为org.gradle.api.Project的项目':app'上找到参数[build_38ehqsoyd54r3n1gzrop303so $ _run_closure4 @ 10012308]的方法jacocoTestReport()。

我的build.gradle文件包含以下项目:

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.6.201602180812"
    reportsDir = file("$buildDir/reports/jacoco")
}

jacocoTestReport {
    group = "Reporting"
    reports {
        xml.enabled true
        csv.enabled false
        html.destination "${buildDir}/reports/coverage"
    }
}

当我看到documentation 时,我看不到任何我做错的事。

Gradle版本:3.3

为什么我收到此错误以及如何解决?

2 个答案:

答案 0 :(得分:5)

基本上我知道实现这个目标的两种方法。

第一种方法是内置的Android gradle插件功能:

android { 
    ... 
    buildTypes { 
       debug { 
          testCoverageEnabled = true 
       } 
       ... 
    } 
    ... 
}

这个将定义可以执行的gradle任务。据我所知,这与仪器测试一起工作正常。更多信息:Code Coverage on Android

第二种方法是使用此插件:

https://github.com/vanniktech/gradle-android-junit-jacoco-plugin

设置很简单:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
         classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.6.0'
    }
}

apply plugin: 'com.vanniktech.android.junit.jacoco'

项目同步后,您将拥有jacocoTestReport<Flavor><BuildType>

等任务

我们使用它来衡量在本地计算机上运行的单元测试的代码覆盖率。

答案 1 :(得分:3)

documentation mentioned in your question中所述:

  

如果Java插件也应用于您的项目,则会创建一个名为jacocoTestReport的新任务,该任务取决于测试任务。

什么是非常合理的 - 测量Java代码的覆盖范围需要编译,执行测试等等。

因此,确实使用build.gradle示例会导致失败,这会在添加apply plugin: 'java'后消失。