JaCoCo devuelve 0% de cobertura con Kotlin y Android 3.0

Estoy intentando verificar la cobertura de mi código para un caso de testing que escribí en Kotlin. Cuando ejecuto ./gradlew createDebugCoverageReport --info , mi file coverage.ec está vacío y mis informes indican que tengo 0% de cobertura. Tenga en count que los casos de testing son 100% exitosos. ¿Alguien puede pensar en alguna razón por la que mi file coverage.ec sigue arrojando 0 bytes?

He buscado en todas partes sin suerte.

 apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'jacoco' android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { testCoverageEnabled = true } release { minifyEnabled false testCoverageEnabled = true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } testOptions { unitTests.all { jacoco { includeNoLocationClasses = true } } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:25.4.0' testImplementation 'junit:junit:4.12' implementation files('pathtosomejarfile') } jacoco { toolVersion = "0.7.6.201602180812" reportsDir = file("$buildDir/customJacocoReportDir") } task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) { reports { xml.enabled = true html.enabled = true } def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*'] def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter) def mainSrc = "${project.projectDir}/src/androidTest/java" sourceDirectories = files([mainSrc]) classDirectories = files([debugTree]) executionData = fileTree(dir: "$buildDir", includes: [ "jacoco/testDebugUnitTest.exec", "outputs/code-coverage/connected/*coverage.ec" ]) } 

Puede get cobertura línea por línea para el código de Java y Kotlin definiendo los dos directorys diferentes para los files .class generados:

 def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter) def kotlinDebugTree = fileTree(dir: "${buildDir}/tmp/kotlin-classes/debug", excludes: fileFilter) 

Entonces, simplemente incluya ambos fileTrees en su classDirectorios:

 classDirectories = files([debugTree], [kotlinDebugTree]) 

Después de unos días, descubrí una solución a este problema. Para aquellos de ustedes que experimentan problemas similares: en su carpeta intermedia debe haber una carpeta tmp. Esta carpeta contiene los files .class para los files de Kotlin. Si cambia la ruta de fileTree (dir: "$ {buildDir} / intermediate / classes / debug", excluye: fileFilter) hasta donde están ubicados esos files de class, ¡Jacoco generará la cobertura del código para usted! Tenga en count que no podrá ver una descripción completa, línea por línea, de su cobertura utilizando este método.

  • ¿Cómo get Kotlin AST?
  • ¿Cuál es el equivalente de Kotlin de String de Java?
  • Cómo get la class de parámetro genérico en Kotlin
  • ¿Cómo encadenar transformaciones en Android al usar datos en vivo?
  • ¿Cómo resolver esta verificación nula en el inicializador de forma segura?
  • Cómo crear una consulta hql con left join usando el campo desde el object que se extiende
  • utilizando compile "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version" give Error
  • kotlin setter infinte recursión
  • Repetir una textura en una región de textura
  • ¿Por qué las funciones públicas en línea pueden llamar a constructores privados?
  • La mejor forma de manejar los retornos en el pnetworkingicado