Notez cette fois l'acquisition de la couverture avec les tests instrumentés Android. Tout d'abord, lors d'un test unitaire avec Android Studio Je parlais d'utiliser Robolectric pour tester des pièces dépendant d'Android sur une JVM. Pour diverses raisons, j'ai fini par écrire le test Android Test précédent.
Je ne savais rien du développement Android pour la première fois, j'ai donc dû enquêter sur diverses choses.
Le problème, c'est que je n'ai pas pu obtenir de couverture C0C1 car la version Jacoco était ancienne. Honnêtement, je ne pense pas qu'il soit ridicule de passer du temps honnêtement avec la couverture de C0C1. Il n'y a rien de tel que "plus la couverture est élevée, plus la qualité du code source est élevée".
Eh bien, si on me disait de le régler à 100, je n'avais pas d'autre choix que de le faire, alors j'ai enquêté sur diverses choses. Je n'écris pas de code de test pour le rendre à 100%, mais je le donne à Jacoco 0.8.0 ou supérieur. J'ai vu l'article disant que si vous passez à la version Jacoco 0.8.0, cela améliorera la couverture C0C1. Cependant, je ne pouvais tout simplement pas changer la version de Jacoco référencée dans le createDebugCoverageReport.
Cela peut être dû à un manque d'étude, mais je n'ai pas pu définir d'exclusions dans createDebugCoverageReport. J'ai fait beaucoup de recherches, mais je ne pouvais pas le faire, donc je ne peux pas m'en empêcher.
Des points de vue 1 et 2 ci-dessus, nous abandonnons la stratégie 1 et passons à la stratégie 2.
Comment rédiger votre propre tâche pour obtenir une couverture dans Gradle. Avec cela, j'ai pu résoudre 1 et 2 de la stratégie 1.
jacoco {
toolVersion = "0.8.3"
}
task jacocoTestReport(type: JacocoReport, dependsOn: "connectedDebugAndroidTest") {
group = "Reporting"
description = "Generate Jacoco coverage reports"
// exclude auto-generated classes and tests
def fileFilter = ['**/R.class',
'**/R$*.class',
'**/R.styleable',
'**/R$*.styleable',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*IScript*.*',
'android/**/*.*',
'androidx/**/*.*',
'**/*_Impl*',
'**/*_Factory*',
'**/*_MembersInjector*',
'**/*Fake*']
def debugTree = fileTree(dir:
"${project.buildDir}/intermediates/javac/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.projectDir, includes:
['**/*.exec', '**/*.ec'])
reports {
xml.enabled = true
xml.destination = "${buildDir}/jacocoTestReport.xml"
csv.enabled = false
html.enabled = true
html.destination = "${buildDir}/reports/jacoco"
}
}
J'ai pu spécifier la version de Jacoco et définir des exclusions comme celle-ci, Utilisons celui-ci à l'avenir.
Bye Bye
Recommended Posts