[JAVA] Comment obtenir une couverture des tests instrumentés Android [Faites de votre mieux]

introduction

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.

Stratégie 1: utilisez "createDebugCoverageReport".

1. Je n'ai pas pu changer la version de Jacoco

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.

2. Les paramètres d'exclusion ne peuvent pas être définis

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.

Stratégie 2: "rapport de test jacoco"

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

Comment obtenir une couverture des tests instrumentés Android [Faites de votre mieux]
Comment obtenir le jour d'aujourd'hui
[Java] Comment obtenir l'URL de la source de transition
[Java] Comment obtenir la valeur maximale de HashMap
À partir d'avril 2018 Comment installer Java 8 sur Mac
Comment empêcher editTextPreference de Android PreferenceFragmentCompat de se rompre
[Rails] Comment obtenir le contenu des paramètres forts
[Swift] Comment obtenir l'ID de document Firebase
Une version Java non prise en charge Comment se débarrasser des erreurs
Comment obtenir des valeurs en temps réel avec TextWatcher (Android)
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
Comment implémenter l'affichage sur une seule ligne de TextView dans le développement Android
[jsoup] Comment obtenir la totalité de la documentation
Comment exécuter JUnit par lots et obtenir une couverture
Vous pouvez tout faire avec votre smartphone ou tablette Android! Résumé d'Arekore pour déménager avec Termux
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Comment obtenir la longueur d'un fichier audio avec Java
Comment installer confortablement JDK 11 dans votre Mac
Comment utiliser HttpClient de Java (Get)
Comment démarrer avec Slim
Comment "évider" une vue sur Android
Obtenez la couverture du code JUnit sur Android.
Comment obtenir des paramètres dans Spark
Comment utiliser setDefaultCloseOperation () de JFrame
[Android] Comment créer un fragment de dialogue
[Java] [ibatis] Comment obtenir des enregistrements de relation 1 à N avec List <Map <>>
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Pour les débutants Rails] Résumé de l'utilisation de RSpec (obtenir un aperçu)
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Comment créer votre propre annotation en Java et obtenir la valeur