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

Comment tester les scénarios « os.Exit » dans Go sans planter votre suite de tests ?

Patricia Arquette
Libérer: 2024-11-13 12:17:02
original
583 Les gens l'ont consulté

 How to Test `os.Exit` Scenarios in Go Without Crashing Your Test Suite?

Test des scénarios os.exit dans Go

Dans Go, la fonction os.Exit arrête l'exécution du programme et quitte le système d'exploitation. Mais comment tester des scénarios impliquant os.Exit dans une suite de tests sans affecter les autres tests ?

Considérez le code suivant :

func doomed() {
  os.Exit(1)
}
Copier après la connexion

Pour tester que l'appel voué à l'échec entraîne une sortie, nous Je ne peux pas simplement l'appeler dans le test, car cela mettrait également fin au programme d'exécution du test. Explorons plutôt l'approche démontrée par Andrew Gerrand.

La méthode de Gerrand consiste à exécuter le test dans un processus distinct. Cela nous permet d'encapsuler l'appel os.Exit dans le processus séparé, garantissant qu'il n'a pas d'impact sur le lanceur de test principal.

Voici comment cela fonctionne :

// main_test.go
package main

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

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)
}
Copier après la connexion

Ce test invoque go testez à nouveau dans un processus distinct, ciblant uniquement le test TestCrasher. Il définit une variable d'environnement (BE_CRASHER) que le sous-processus vérifie. S'il est défini, le sous-processus appelle Crasher et se termine immédiatement pour éviter une récursion infinie.

Pendant ce temps, le processus de test d'origine peut alors valider le code de sortie du sous-processus, garantissant qu'il se termine comme prévu.

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