Maison >développement back-end >Golang >Comment tester les scénarios os.Exit dans Go ?

Comment tester les scénarios os.Exit dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 15:11:03552parcourir

How to Test os.Exit Scenarios in Go?

Test des scénarios os.Exit dans Go

Dans Go, la fonction os.Exit met fin à l'exécution du programme en cours, ce qui rend le test difficile scénarios impliquant la fin du programme. Une approche pour résoudre ce problème consiste à utiliser un processus distinct et des vérifications de sous-processus.

Exemple :

Considérez la fonction suivante :

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

Pour tester cette fonction, nous créons un scénario de test distinct et appelons la fonction dans un processus distinct.

Test Cas :

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

func TestDoomed(t *testing.T) {
    if os.Getenv("BE_DOOMED") == "1" {
        doomed()
        return
    }

    cmd := exec.Command(os.Args[0], "-test.run=TestDoomed")
    cmd.Env = append(os.Environ(), "BE_DOOMED=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)
}

Dans ce cas de test :

  • Nous vérifions si la variable d'environnement BE_DOOMED est définie sur "1", indiquant que nous sommes dans un environnement secondaire appel de processus.
  • Si défini, nous invoquons la fonction condamnée, puis revenons, quittant le processus secondaire avec élégance.
  • Sinon défini, nous lançons une invocation de processus secondaire à l'aide de exec.Command, limitant l'exécution à la fonction de test actuelle (-test.run=TestDoomed).
  • Nous transmettons l'indicateur BE_DOOMED en tant que variable d'environnement dans le processus secondaire.
  • Une fois le processus secondaire terminé, nous vérifions le code de sortie en utilisant exec.ExitError. Le succès revient si le processus s'est terminé avec une erreur ; échec s'il réussit sans erreur.

Cette approche nous permet d'isoler l'appel os.Exit dans un processus distinct, garantissant qu'il n'affecte pas 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