Maison  >  Article  >  développement back-end  >  Comment tester le comportement de « os.Exit » dans les suites de tests Go ?

Comment tester le comportement de « os.Exit » dans les suites de tests Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 17:35:03908parcourir

How Do You Test `os.Exit` Behavior in Go Test Suites?

Test des scénarios os.Exit dans Go

Lors du test des fonctions Go qui invoquent os.Exit(), une approche unique est nécessaire pour éviter ces sorties d'interférer avec les tests ultérieurs.

Pour résoudre ce problème, considérez ce qui suit code :

func doomed() {
  os.Exit(1)
}

Comment tester correctement le comportement de os.Exit à l'aide de Go Test

Pour tester le comportement de sortie de cette fonction, nous pouvons exploiter une technique décrite par Andrew Gerrand, membre principal de l'équipe Go :

  1. Créer un processus distinct pour Test :
    Invoquez à nouveau go test dans un processus distinct à l'aide de exec.Command. Limitez l'exécution au test qui déclenche os.Exit.
  2. Transmettez une variable d'environnement :
    Définissez une variable d'environnement (par exemple, BE_CRASHER=1) dans le sous-processus. La fonction testée peut vérifier cette variable et appeler os.Exit uniquement si elle est définie.
  3. Valider le code de sortie :
    Une fois le sous-processus terminé, validez le code de sortie dans le test d'origine processus. S'il correspond à la valeur attendue (par exemple, 1), le test a réussi.

Exemple de code de test :

package main

import (
    "fmt"
    "os"
    "os/exec"
    "testing"
)

func Crasher() {
    fmt.Println("Going down in flames!")
    os.Exit(1)
}

func TestCrasher(t *testing.T) {
    if os.Getenv("BE_CRASHER") == "1" {
        Crasher()
        return
    }
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")
    err := cmd.Run()
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

En séparant les processus de test et en utilisant des variables d'environnement pour contrôler l'exécution, vous pouvez tester efficacement les scénarios os.Exit dans vos suites de tests Go sans affecter les autres tests.

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