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.

  • Kotlin: ¿por qué necesito inicializar una var con getter personalizado?
  • ¿Es posible usar Kotlin en Grails?
  • Referencia no resuelta usando Kotlin para android
  • ¿Cómo usar AndroidAnnotación @ FragmentArg con Kotlin?
  • ¿Muchos modules pequeños o pocos modules grandes para get el mejor performance de compilation?
  • ¿Agregar int e int? en Kotlin
  • Poniendo un lambda genérico en un map
  • El module debe ser configurado
  • RecyclerView: implementa correctamente la eliminación de SnackBar UNDO (Kotlin)
  • Clases de datos en Kotlin
  • Android comtesting si la input de text (hora) coincide con el formatting