Покрытие кода Jacoco не включает мой модуль приложения в проект multi modules android - PullRequest
0 голосов
/ 29 апреля 2020

Я использую Jacoco для генерации HTML отчета о покрытии кода модульными или инструментальными тестами.

Мой android проект состоит из нескольких модулей:

  • приложение (приложение android);
  • custom-calendarview (lib);
  • iotcam (lib);
  • qrcodereaderview (lib);
  • singledateandtimepicker (lib).

Используя этот учебник: https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f и этот пример: https://github.com/rafaeltoledo/unified-code-coverage-android/blob/mixed-languages/jacoco.gradle Я написал следующий код:

apply plugin: "jacoco"

jacoco
{
  toolVersion = "0.8.5"
}

tasks.withType(Test) {
  jacoco.includeNoLocationClasses = true
}

task executeUnitAndIntegrationTestsAndCreateReport(type: JacocoReport, dependsOn: ['testQaUnitAndIntegrationTestsDebugUnitTest', 'createQaUnitAndIntegrationTestsDebugCoverageReport']) {
  reports
  {
    xml.enabled = true
    html.enabled = true
    html.destination file("${rootProject.buildDir}/coverage-report")
  }

  def javaClasses = []
  def kotlinClasses = []
  def javaSrc = []
  def kotlinSrc = []
  def execution = []

  def fileFilter = [
  '**/R.class',
  '**/R$*.class',
  '**/BuildConfig.*',
  '**/Manifest*.*',
  '**/*Test*.*',
  'androidx/**/*.*',
  ]

  rootProject.subprojects.each { proj ->
    println "current proj: $proj"

    javaClasses << fileTree(dir: "$proj.buildDir/intermediates/javac/debug", excludes: fileFilter)
    kotlinClasses << fileTree(dir: "$proj.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)
    javaSrc << "$proj.projectDir/src/main/java"
    kotlinSrc << "$proj.projectDir/src/main/kotlin"
    execution << fileTree(dir: proj.buildDir,
    includes: ['**/*.exec', '**/*.ec'])
  }

  println "javaSrc: $javaSrc"
  println "kotlinSrc: $kotlinSrc"

  sourceDirectories.from = files([javaSrc, kotlinSrc])
  classDirectories.from = files([javaClasses, kotlinClasses])

  print execution

  executionData.from = files(execution)

  doLast() {
    print "${reports.html.destination}/index.html"
  }

Согласно журналам, все модули учитываются в переменных javaSrc и kotlinSrc:

JavaSr c: [C: \ mypath \ app / src / main / java, C: \ mypath \ custom-calendarview / src / main / java, C: \ mypath \ iotcam / src / main / java, C: \ mypath \ qrcodereaderview / src / main / java, C: \ mypath \ singledateandtimepicker / src / main / java]

kotlinSr c: [C: \ mypath \ app / src / main / kotlin, C: \ mypath \ custom-calendarview / src / main / kotlin, C: \ mypath \ iotcam / src / main / kotlin, C: \ mypath \ qrcodereaderview / src / main / kotlin, C: \ mypath \ singledateandtimepicker / src / main / kotlin]

[каталог 'C: \ mypath \ app \ build', каталог 'C: \ mypath \ custom-calendarview \ build', каталог 'C: \ mypath \ iotcam \ build', каталог 'C: \ mypath \ qrcodereaderview \ build', каталог 'C: \ mypath \ singledateandtimepicker \ build']

Наконец, отчет о покрытии кода сформирован правильно, но он содержит имя пакета из ВСЕХ подмодулей, за исключением «app»:

enter image description here

Обратите внимание, что если я нажму на ссылку «сеансы», я найду все классы модуль "app".

Как добавить модуль "app" в этот отчет?

Спасибо за помощь!

...