Maison > développement back-end > Golang > le corps du texte

## Comment obtenir une couverture complète des tests fonctionnels : combler le fossé entre le code et l'exécution ?

Susan Sarandon
Libérer: 2024-10-25 18:43:02
original
157 Les gens l'ont consulté

## How to Achieve Complete Coverage in Functional Tests: Bridging the Gap Between Code and Execution?

Comment afficher une couverture complète dans les tests fonctionnels

Problème :

Les tests fonctionnels exécutent une compilation code binaire, laissant de la place aux angles morts découverts.

Extrait de code :

<code class="go">package main

import (
    "fmt"
    "math/rand"
    "os"
    "time"
)

var exitCode int

func Test_main(t *testing.T) {
    go main()
    exitCode = <-exitCh
}

func TestMain(m *testing.M) {
    m.Run()
    // can exit because cover profile is already written
    os.Exit(exitCode)
}

func main() {
    rand.Seed(time.Now().UTC().UnixNano())
    for {
        i := rand.Int()
        fmt.Println(i)
        if i%3 == 0 {
            os.Exit(0)
        }
        if i%2 == 0 {
            os.Exit(1)
        }
        time.Sleep(time.Second)
    }
}</code>
Copier après la connexion

Solution :

1. Exclure la fonction principale à l'aide de balises de construction :

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

package main

func main() {
    os.Exit(doFunc());
}</code>
Copier après la connexion

Construire avec des balises :

go test -c -coverpkg=. -o example -tags test
Copier après la connexion

2. Extraire la fonctionnalité vers du code testable :

Évitez de tester la fonction principale en extrayant la fonctionnalité dans d'autres classes. Utilisez func TestMain pour contrôler l'exécution du code sur le thread principal.

3. Utilisez Mocking :

Créez des simulations pour les dépendances afin d'isoler des chemins de code spécifiques et d'améliorer la testabilité.

4. Délais d'attente pour la couverture :

Ajoutez un délai d'attente au test pour donner à l'outil de couverture le temps d'écrire le profil avant la fermeture de l'application.

Exemple avec les délais d'attente :

<code class="go">func exit(code int) {
    exitCh <- code
    time.Sleep(1 * time.Second) // Allow time for coverage data to be written
    os.Exit(code)
}</code>
Copier après la connexion

Avantages :

  • Angles morts découverts dans la couverture des tests fonctionnels
  • Testabilité et maintenabilité améliorées du code de production
  • Confiance dans l'exactitude et l'exhaustivité des rapports de couverture

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!