Fermer

juillet 5, 2022

Couverture des tests de flottement | AU NOUVEAU Blog

Couverture des tests de flottement |  AU NOUVEAU Blog


En tant que bonne pratique, nous devrions toujours écrire des tests unitaires lors de l’écriture du code d’un logiciel. Ensuite, il est important de mesurer si le test que nous écrivons est suffisant pour notre code ou non, selon nos critères de couverture.

Nous utilisons quelques outils, décrits ci-dessous, qui vérifient quelles lignes de codes ne sont pas couvertes par les tests.

Pré-requis (outils de base) requis pour faire le test:

  • IDE – Android Studio ou code VS
  • Cadre – flottement
  • Lcôve
  • Savoir écrire des tests

Voici la commande pour exécuter test en flutter :

test de flottement

Cette commande exécutera tous les fichiers de test sous le dossier principal / test du projet racine. Si nous voulons également générer une couverture, nous devons exécuter la commande suivante :

Test de flottement — couverture

Test avec couverture wcréer un dossier de couverture dans le projet racine avec un fichier nommé lcov.info. Ce fichier contient toutes les informations relatives à la couverture de test de chaque fichier.

Il y a un problème dans la couverture des tests de flottement, il ne signalerait pas les fichiers non testés dans lcov. Il existe une solution pour tout inclure dans le rapport de couverture de test lcove. Nous devons écrire un script pour importer tous les fichiers Dart, à l’exception des fichiers générés tels que les fichiers *.g., les fichiers gelés, etc. Vous pouvez voir le problème en détail ici : https://github.com/flutter/flutter/issues/27997

À l’avenir, nous allons également créer un fichier import_file_coverage.sh

fichier=test/coverage_helper_test.dart
printf « // Fichier d’assistance pour que la couverture fonctionne pour tous les fichiers de fléchettes\n » > $file
printf « // ********************************************** ****************************\n » >> $fichier
printf « // À cause de cela : https://github.com/flutter/flutter/issues/27997#issue-410722816\n » >> $file
printf « // NE PAS MODIFIER CE FICHIER UTILISER : sh scripts/import_files_coverage.sh YOUR_PACKAGE_NAME\n » >> $file
printf « // ********************************************** ****************************\n » >> $fichier
printf « \n » >> $fichier
printf « // ignore_for_file: unused_import\n » >> $file
trouver lib \
‘!’ -chemin ‘*généré*/*’ \
‘!’ -iname ‘*.g.dart’ \
‘!’ -iname ‘*.freezed.dart’ \
‘!’ -iname ‘*.part.dart’ \
‘!’ -iname ‘generated_plugin_registrant.dart’ \
-iname ‘*.dart’ \
| couper -c4- | awk -v package=”${1}” ‘{printf “import ‘\”package:%s%s’\”;\n”, package, $1}’ >> $file
printf « \nvoid main(){} » >> $fichier

Ce fichier (import_file_coverage.sh) a besoin d’un nom de paquet comme paramètre. Nous ajoutons le nom du package et exécutons la commande comme suit :

sh import_file_coverage.sh nom_de_votre_paquet

Cela va générer couverture_helper_test.dart fichier sous le dossier de test et ajoutez tous ces fichiers dans lcov.info pour générer un rapport sur tous ces fichiers.

Maintenant, notre prochaine tâche consiste à créer un rapport de couverture de test lisible à partir de lcove.info dossier. Pour ce faire, nous prendrons l’aide de genhtml commande qui générera un fichier html lisible qui s’ouvrira dans votre navigateur par défaut :

Bravo, nous avons maintenant une couverture en ligne de chaque dossier et fichier !

Lorsque nous cliquons sur l’un des fichiers de l’image ci-dessus, cela nous amène à une couverture détaillée de MaPageAccueil.dart fichier comme ci-dessous :

Dans les fichiers ci-dessus, les lignes bleues signifient les lignes couvertes et les rouges signifient les lignes non testées. Comme on peut le voir dans MaPageAccueil.dart fichier que nous avons couvert 93,3%, avec deux lignes restent non testées. Nous pouvons également couvrir ces lignes en écrivant des tests pour ces lignes.

Mais il y a un défi ici. Dans les modèles, nous voyons qu’il n’y a qu’une couverture de 70,8 % (en haut à droite dans la cellule de couleur rouge). En effet, il a également couvert les fichiers générés pour lesquels nous ne pouvons pas écrire de cas de test. Ainsi, nous supprimerons tous *.g.dart fichiers et autres fichiers générés à partir de notre fichier lcove généré. Voici la commande pour supprimer les fichiers générés :

lcov – supprimer la couverture/lcov.base.info \
‘lib/main.dart’ \
‘lib/*/*.freezed.dart’ \
‘lib/*/*.g.dart’ \
‘lib/*/*.part.dart’ \
‘**/généré/*.dart’ \
‘**/généré/*/*.dart’ \
‘**/gen/*.dard’\
‘**/gen/*/*.dard’\
-o couverture/lcov.base.info

Maintenant, tout le script ressemblera à ceci :

Dossier create_clean_lcov_and_generate_html.sh

#!/bin/bash
ensemble -e
flutter pub obtenir
sh scripts/import_files_coverage.sh your_package_name
test de flottement – ​​couverture
lcov – supprimer la couverture/lcov.base.info \
‘lib/main.dart’ \
‘lib/*/*.freezed.dart’ \
‘lib/*/*.g.dart’ \
‘lib/*/*.part.dart’ \
‘**/généré/*.dart’ \
‘**/généré/*/*.dart’ \
‘**/gen/*.dard’\
‘**/gen/*/*.dard’\
-o couverture/lcov.base.info
genhtml couverture/lcov.info -o couverture // générera un fichier html lisible à partir de lcov.info dossier
ouvert couverture/index.html

Et enfin, nous devons extraire le pourcentage total de couverture de test de lcov.info fichier qui est couvert, pour cela nous écrirons la commande suivante :

taux de couverture=$(lcov –summary « couverture/lcov.base.info » | grep « lignes…… » | coupe -d ‘ ‘ -f 4 | coupe -d ‘%’ -f 1)

REQUIRED_COVERAGE_PERC=80 // Vous pouvez définir le pourcentage que vous souhaitez couvrir, dans ce cas nous avons défini 80%

Après avoir obtenu le pourcentage, nous pouvons l’utiliser dans n’importe quel CI pour quitter le processus de construction s’il ne répond pas à nos critères ou pourcentage de couverture de code minimum. Voici le code suivant pour faire la même chose :

taux de couverture=$(lcov –summary « couverture/lcov.base.info » | grep « lignes…… » | coupe -d ‘ ‘ -f 4 | coupe -d ‘%’ -f 1)
REQUIRED_COVERAGE_PERC=80 // Vous pouvez définir le pourcentage que vous souhaitez couvrir, dans ce cas nous avons défini 80 %

si [ “$(echo “${coverageRate} < $REQUIRED_COVERAGE_PERC” | bc)” -eq 1 ]; alors
printf « la couverture est trop faible, nous avons exigé ${REQUIRED_COVERAGE_PERC} % et avons ${coverageRate}%.\n »
sortie 1
autre
printf « Le taux de couverture est à la hauteur.\n »
Fi

J’espère que ce blog vous aidera à comprendre comment vous pouvez mesurer la couverture du code flottant et s’il répond à nos critères de couverture minimale.

Restez à l’écoute pour la partie 2 de ce blog qui couvrira « Comment tester les sous-packages du projet Flutter ».

TROUVÉ CELA UTILE ? PARTAGEZ-LE




Source link