Maison  >  Article  >  développement back-end  >  ## Comment obtenir une couverture complète des tests fonctionnels : combler le fossé entre le code et l'exécution ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 18:43:02157parcourir

## 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>

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>

Construire avec des balises :

go test -c -coverpkg=. -o example -tags test

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>

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!

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