android unit-testing gradle android-gradle jacoco

¿Cómo obtengo un informe de cobertura de jacoco con Android gradle plugin 0.10.0 o superior?



unit-testing android-gradle (5)

Creé un complemento de código abierto para eso.

Root build.gradle

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

Entonces simplemente ejecuta

./gradlew jacocoTestReportDebug // or jacocoTestReportRelease

Ejecutará las pruebas JUnit y luego le dará la salida de Jacoco en formato xml y html en el directorio de compilación correspondiente para el tipo de compilación de depuración.

Estoy tratando de obtener un informe de cobertura de prueba usando el complemento Gradle Android 0.10.2. Pero aún no puedo obtener un informe de cobertura después de ejecutar algunas pruebas. (connectedAndroidTest).

mi build.gradle de mi módulo principal es:

apply plugin: ''android'' android { compileSdkVersion 19 buildToolsVersion "19.0.3" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { debug { testCoverageEnabled true } release { runProguard false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt'' } } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) compile ''com.android.support:appcompat-v7:19.+'' }

y la sección de buildscript del build gradle del proyecto es:

buildscript { repositories { mavenCentral() } dependencies { classpath ''com.android.tools.build:gradle:0.10.+'' } }

Una vez que ejecuto un gradlew connectedAndroidTest desde la terminal, puedo encontrar la carpeta de coverage-instrumented-classes y la carpeta de code-coverage dentro de la carpeta de build . Pero no puedo encontrar la carpeta de coverage en la carpeta de reports . (Solo que puedo ver es la carpeta androidTests )

¿Hay algo que falta para obtener un informe de cobertura de Jacobo?


Durante los cientos de veces que busqué la respuesta para obtener un informe de cobertura, finalmente encontré una respuesta exacta de lo que quería.

Desde la publicación de este blog , descubrí que gradlew createDebugCoverageReport crea el informe de cobertura de jacoco.

Además, desde el código fuente del complemento gradle, el complemento usa jacoco 0.6.2.201302030002 de manera predeterminada. (por lo tanto, no se requiere la definición de la versión de jacoco si va a utilizar una versión predeterminada)

En resumen, los pasos ESENCIALES para obtener un informe de cobertura de jacoco con el complemento gradle de Android son:

  1. Android gradle plugin versión 0.10.0 o superior (normalmente en build.gradle su proyecto)
  2. agregue testCoverageEnabled true al tipo de compilación que desea (es decir, debug )
  3. ejecutar $ gradlew createDebugCoverageReport o gradlew connectedCheck para obtener un informe de cobertura de jacoco .

Puede encontrar su informe de cobertura en build/reports/coverage/{buildType} . (es decir, build/reports/coverage/debug para la compilación de depuración)

(Agregar un caso de sabores múltiples del comentario de @ odiggity)

Si su proyecto utiliza una configuración de sabores múltiples, use create{flavorName}CoverageReport lugar. El informe de cobertura se generará en build/reports/coverage/{flavorName}/{buildType} .

Ejemplo para flavor krInternal con tipo de compilación de depuración :

  • Comando: ./gradlew createKrInternalDebugCoverageReport
  • El informe se genara en: build/reports/coverage/krInternal/debug

Propina :

Como solo puede obtener un informe de cobertura con el emulator y el device with root permission , obtendrá el siguiente error después de ejecutar un comando en el dispositivo normal (no rooteado):

05:48:33 E/Device: Error during Sync: Permission denied java.io.IOException: com.android.ddmlib.SyncException: Permission denied at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:114) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:158) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:42) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:695) Caused by: com.android.ddmlib.SyncException: Permission denied at com.android.ddmlib.SyncService.doPullFile(SyncService.java:511) at com.android.ddmlib.SyncService.pullFile(SyncService.java:320) at com.android.ddmlib.Device.pullFile(Device.java:849) at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:107) ... 10 more :myDirections:connectedAndroidTest FAILED FAILURE: Build failed with an exception.


Gradle ya cuenta con soporte integrado para generar informes de cobertura de prueba y no necesitamos crear configuraciones adicionales ni agregar ningún complemento para generar un informe de cobertura de prueba. Básicamente, lo único que tenemos que hacer es establecer el parámetro testCoverageEnabled en true en el archivo build.gradle la siguiente manera:

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

A continuación, podemos ejecutar la siguiente tarea de Gradle desde CLI:

./gradlew createDebugCoverageReport

En Windows, podemos ejecutarlo así:

gradlew.bat createDebugCoverageReport

La tarea analizará el código de nuestro proyecto en el directorio /src/main/java/ y las pruebas unitarias ubicadas en el directorio /src/androidTest/java/ . Después de ejecutar esta tarea, podemos encontrar el informe de cobertura de prueba en el siguiente directorio del módulo:

/build/outputs/reports/coverage/debug/

Cuando abrimos el archivo index.html , podemos ver el informe visual de la cobertura de la prueba, que se puede ver en un navegador web.

Se ve como en la imagen de abajo.

artículo sobre informe de cobertura de prueba en la aplicación de Android http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/


Si desea usar una versión diferente a la predeterminada, agregue

jacoco { version = ''0.7.3.201502191951'' }

dentro de la etiqueta de android en build.gradle su aplicación.

Una forma de encontrar el último número de versión: busque "org.jacoco: jacoco" en JCenter .


Tengo que agregar una respuesta en lugar de un comentario ya que mi reputación es inferior a 50 ...

Lo que quiero complementar es:

Google lanzó nuevas herramientas de compilación para solucionar el desagradable problema "VerifyError" ( link ).

Intente cambiar su configuración en gradle para usar las últimas herramientas de compilación si encuentra el problema "VerifyError". Por ejemplo,

android { ...... buildToolsVersion ''21.1.1'' ..... }

Dado que las herramientas de compilación 21.0.0 tienen errores, utilice una versión mayor que 21.0.0. Yo uso 21.1.1.