2017-05-09 280 views
3

我试图在Gradle中生成一个Jacoco测试报告。当我尝试同步我的代码,我会收到以下错误:Gradle Jacoco - 找不到方法jacocoTestReport()

Error:(56, 0) Could not find method jacocoTestReport() for arguments [[email protected]] on project ':app' of type org.gradle.api.Project.

我的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,我不看到我做错了什么。

摇篮版本:3.3

我为什么会收到这个错误,我该如何解决?

回答

3

基本上我知道两种方法来实现这一点。

第一种方法是将内置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>

我们用这个来衡量重申我们在本地机器上运行的单元测试的代码覆盖率。

+0

好吧,第一个解决方案为我工作。 – Guido

1

正如documentation mentioned in your question说:

If the Java plugin is also applied to your project, a new task named jacocoTestReport is created that depends on the test task.

什么是很合乎逻辑的 - 覆盖Java代码的测量需要它的编译,测试执行等

您的build.gradle例子所以确实使用导致失败,在添加apply plugin: 'java'后消失。

+0

嘿,我已经试过了。但是我在Android上使用它,所以我不能使用'apply plugin:'java''。对不起,我忘了提及,我更新了标签。 – Guido

+0

@Guido我没有为Android开发,但缺少'java'插件看起来很奇怪。无论如何,我相信你应该向Gradle开发者报告这种不兼容性(因为JaCoCo插件是Gradle发行版的一部分),或者向Android插件的开发者报告。 – Godin

+0

这已经是一件已知的事情。当您尝试在Android应用程序中使用'apply plugin:'java''时,您还会收到以下错误:'错误:已应用'java'插件,但它与Android插件不兼容。' – Guido