Heim  >  Artikel  >  Backend-Entwicklung  >  Wie testen Sie das „os.Exit“-Verhalten in Go-Testsuiten?

Wie testen Sie das „os.Exit“-Verhalten in Go-Testsuiten?

Barbara Streisand
Barbara StreisandOriginal
2024-11-11 17:35:03908Durchsuche

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

Testen von os.Exit-Szenarien in Go

Beim Testen von Go-Funktionen, die os.Exit() aufrufen, ist ein einzigartiger Ansatz erforderlich, um dies zu verhindern diese Exits stören nachfolgende Tests nicht.

Um dieses Problem zu beheben, berücksichtigen Sie den folgenden Code:

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

So testen Sie das os.Exit-Verhalten ordnungsgemäß mit Go Test

Um das Exit-Verhalten dieser Funktion zu testen, können wir eine von Andrew Gerrand, einem Kernmitglied des Go-Teams, beschriebene Technik nutzen:

  1. Erstellen Sie einen separaten Prozess zum Testen :
    Rufen Sie go test erneut in einem separaten Prozess mit exec.Command auf. Beschränken Sie die Ausführung auf den Test, der os.Exit auslöst.
  2. Übergeben Sie eine Umgebungsvariable:
    Legen Sie eine Umgebungsvariable (z. B. BE_CRASHER=1) im Unterprozess fest. Die getestete Funktion kann nach dieser Variablen suchen und os.Exit nur dann aufrufen, wenn sie festgelegt ist.
  3. Exit-Code validieren:
    Sobald der Unterprozess beendet wird, validieren Sie den Exit-Code im ursprünglichen Test Verfahren. Wenn er mit dem erwarteten Wert (z. B. 1) übereinstimmt, war der Test erfolgreich.

Beispieltestcode:

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)
}

Durch die Trennung von Testprozessen und Mithilfe von Umgebungsvariablen zur Steuerung der Ausführung können Sie os.Exit-Szenarien in Ihren Go-Testsuiten effektiv testen, ohne andere Tests zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWie testen Sie das „os.Exit“-Verhalten in Go-Testsuiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn