Maison >développement back-end >Golang >## Comment obtenir une couverture à 100 % des tests fonctionnels malgré les angles morts ?

## Comment obtenir une couverture à 100 % des tests fonctionnels malgré les angles morts ?

DDD
DDDoriginal
2024-10-25 08:14:021044parcourir

## How to Achieve 100% Coverage in Functional Tests Despite Blind Spots?

Affichage de la couverture des tests fonctionnels sans angles morts

Problème

Dans le code fourni, la méthode de sortie inclut une condition qui exclut l'os.Exit (code) ligne des résultats de couverture. Cela crée une tache aveugle dans le rapport de couverture, car la ligne est exécutée mais n'est pas affichée en vert.

Solution

Il existe deux approches principales pour résoudre ce problème :

Utilisation de TestMain :

  • Extraire les fonctionnalités de l'application dans des classes distinctes pour les tests, en évitant la fonction principale.
  • Utiliser la fonction TestMain dans le cadre de test pour contrôler l'exécution de code sur le thread principal.

Refactorisation du code :

  • Supprimez la condition if de la méthode de sortie et utilisez un mécanisme différent (par ex. , un thread séparé ou un processus de surveillance) pour terminer le processus une fois le profil de couverture écrit.
  • Excluez le fichier main.go des tests à l'aide de balises de build (par exemple, // build !test). Cette approche est recommandée si la fonction principale est simple et ne nécessite pas de test.

Exemple d'implémentation

Voici une version mise à jour du code à l'aide de balises de build :

<code class="go">//+build !test

package main

import "os"

func main() {
    os.Exit(doFunc())
}</code>

Ce code modifié sera exclu des rapports de couverture, vous permettant de représenter avec précision la couverture de vos tests fonctionnels.

Exécuter les tests

Construisez le binaire de couverture avec :

<code class="sh">go test -c -coverpkg=. -o example -tags test</code>

Exécutez les tests avec :

<code class="sh">./example -test.coverprofile=/tmp/profile</code>

Le rapport de couverture résultant devrait maintenant afficher une couverture de relevé de 100 %, y compris la ligne précédemment exclue dans la méthode de sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn