2017-05-09 283 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