Maison >développement back-end >Golang >Comment tester les scénarios « os.Exit » dans Go sans perturber la suite de tests ?
Couvrir divers scénarios de test est crucial pour un développement logiciel robuste. Dans Go, tester les fonctions qui appellent os.Exit présente un défi unique. Comment pouvons-nous tester des scénarios de sortie sans interférer avec l'ensemble de la suite de tests ?
Considérons la fonction suivante, vouée à l'échec :
func doomed() { os.Exit(1) }
Pour tester efficacement que l'invocation de cette fonction déclenche une sortie, vous allez devez utiliser une stratégie qui confine l'appel os.Exit dans le test et l'empêche d'affecter d'autres tests.
Andrew Gerrand, membre principal de l'équipe Go, propose une approche ingénieuse de ce problème dans sa présentation. Implémentons cette solution :
main.go (Programme avec fonction à tester)
package main import ( "fmt" "os" ) func Crasher() { fmt.Println("Going down in flames!") os.Exit(1) }
main_test.go (Test pour Crasher fonction)
package main import ( "os" "os/exec" "testing" ) func TestCrasher(t *testing.T) { // Check if "BE_CRASHER" environment variable is set. if os.Getenv("BE_CRASHER") == "1" { Crasher() return } // Invoke the test again with "BE_CRASHER=1" to trigger the Crasher call. cmd := exec.Command(os.Args[0], "-test.run=TestCrasher") cmd.Env = append(os.Environ(), "BE_CRASHER=1") err := cmd.Run() // Validate exit code. if e, ok := err.(*exec.ExitError); ok && !e.Success() { return } t.Fatalf("process ran with err %v, want exit status 1", err) }
Exécution :
Cette solution fonctionne en :
Grâce à cette approche, vous pouvez tester en toute confiance des scénarios de sortie dans Go sans perturber le reste de votre test suite.
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!