2017-05-09 1 views
3

J'essaie de générer un rapport de test Jacoco dans Gradle. Lorsque je tente de synchroniser mon code, je recevrai l'erreur suivante:Gradle Jacoco - Impossible de trouver la méthode jacocoTestReport()

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

Mon fichier build.gradle contient les éléments suivants:

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" 
    } 
} 

Quand je regarde le documentation, je ne vois tout ce que je fais de mal.

Version Gradle: 3.3

Pourquoi je reçois cette erreur et comment puis-je résoudre ce problème?

Répondre

3

Fondamentalement, je connais deux façons d'y parvenir.

La première approche est la fonctionnalité intégrée de plug-in android gradle:

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

Celui-ci définira les tâches Gradle, qui peuvent être exécutés. Pour autant que je sache, cela fonctionne bien avec les tests d'instrumentation. Plus d'informations: Code Coverage on Android

La 2ème approche consiste à utiliser ce plugin:

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

L'installation est facile:

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

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

Et après la synchronisation de projet, vous aurez des tâches telles que jacocoTestReport<Flavor><BuildType>

Nous utilisons ceci pour mesurer re la couverture de code de nos tests unitaires s'exécutant sur la machine locale.

+0

, la première solution a fonctionné pour moi. – Guido

1

Comme indiqué dans 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.

ce qui est assez logique - la mesure de la couverture de code Java nécessite la compilation, l'exécution de tests, etc.

Alors qu'en effet, l'utilisation de votre exemple de build.gradle provoque l'échec, qui disparaît après l'addition de apply plugin: 'java'.

+0

Hé, j'ai déjà essayé ça. Mais je l'utilise sur Android, donc je ne peux pas utiliser 'apply plugin: 'java''. Désolé j'ai oublié de mentionner cela, j'ai mis à jour les étiquettes. – Guido

+0

@Guido Je ne développe pas pour Android, mais l'absence de plugin 'java' semble étrange. En tout cas je crois que vous devriez rapporter cette incompatibilité soit aux développeurs Gradle (car le plugin JaCoCo fait partie de la distribution Gradle), soit aux développeurs de plugins pour Android. – Godin

+0

C'est déjà une chose connue. Vous recevrez également l'erreur suivante lorsque vous essayez d'utiliser 'apply plugin: 'java'' dans une application Android:' Erreur: le plugin' java 'a été appliqué, mais il n'est pas compatible avec les plugins Android. ' – Guido