7

J'ai hérité d'un projet android pour configurer la couverture de code pour. N'ayant pas fait grand-chose pour android et presque aussi peu en retard, je me suis lancé dans une quête pour trouver un tutoriel utile. Comme les surprises vont, les premiers tutoriels ont été très utiles et j'ai pu inclure le plugin jacoco gradle et activer la couverture de code. En utilisant jenkins j'ai même généré un rapport de couverture. Jusqu'à présent, tout semble bien. Cependant, en jetant les yeux sur le rapport, j'ai senti quelque chose de louche. Le rapport entre le test et le taux de couverture semble être beaucoup trop petit. Une enquête plus approfondie a révélé le coupable.Tests d'instrumentation Android pour la couverture de module de bibliothèque

Les tests proprement dits sont écrits plus comme fonctionnels que comme unitaires. Ce serait bien. Cependant, la bibliothèque du projet n'a aucun test dans son module. Au lieu de cela, les tests de bibliothèque sont écrits dans le module gui (car c'est là que la bibliothèque est utilisée).

Par conséquent, même si la plupart des fonctionnalités de la bibliothèque sont couvertes par des tests, la couverture est générée uniquement pour le contenu du module gui.

projet

- Module

Gui

---- sources

graphiques

---- tous les tests

- module Bibliothèque

---- sources de bibliothèque

Non Je cherchais depuis longtemps une solution de travail. Malheureusement, tout ce que j'ai pu trouver était de savoir comment combiner les résultats de la couverture des tests unitaires et de l'intégration .exec en un seul rapport (ou d'autres solutions basées sur des tests unitaires - dont aucune n'a fonctionné pour les instruments). Ce dont j'ai besoin, c'est de générer une couverture pour les sources à partir du module Bibliothèque en fonction des tests du module Gui.

Comme je trébuche dans l'obscurité ici, est-ce que quelque chose comme ça, est-ce possible?

Répondre

3

Pour tous ceux qui lisent ceci ... si vous avez le même problème, il est temps de commencer à taper la tête contre le mur ...

Aujourd'hui, j'ai eu la chance de tomber sur ceci: https://issuetracker.google.com/issues/37004446#comment12

Le "problème" réel semble être, que les projets de bibliothèque sont "toujours" de type de version. Par conséquent, ils ne contiennent pas de "configuration d'instrumentation nécessaire" (sauf si vous activez la couverture de code pour la publication, bien que je ne l'ai pas testé).

La solution est donc de permettre précisément, dans la bibliothèque à publier, « debug » build (comme mentionné, par défaut est le type de sortie):

android { 
     publishNonDefault true 
} 

Ensuite, dans le projet qui utilise la bibliothèque, spécifier une dépendance debugCompile (version de compilation peut utiliser la configuration de libération « par défaut »):

dependencies { 
     debugCompile project(path: 'library', configuration: 'debug') 
     releaseCompile project('library') 
} 

Et bien sûr (ce que je prends pour acquis), rappelez-vous de permettre une couverture de test pour la bibliothèque:

android { 
     buildTypes { 
       debug { 
         testCoverageEnabled true 
       } 
     } 
}