Я использую 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»:
Обратите внимание, что если я нажму на ссылку «сеансы», я найду все классы модуль "app".
Как добавить модуль "app" в этот отчет?
Спасибо за помощь!