Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teste ich Funktionen, die os.Exit() in Go aufrufen?

Wie teste ich Funktionen, die os.Exit() in Go aufrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-18 01:41:02495Durchsuche

How to Test Functions That Call os.Exit() in Go?

OS.Exit-Szenarien in Go testen

Beim Schreiben von Tests, bei denen Funktionen aufgerufen werden, die das Programm mit os.Exit() beenden, ist es Es ist notwendig, ihre Auswirkungen auf den Rest der Testsuite zu isolieren. Um dieser Herausforderung zu begegnen, können wir den folgenden Ansatz nutzen, der von einer Präsentation von Andrew Gerrand, einem Kernmitglied des Go-Teams, inspiriert ist.

Angenommen eine Funktion, die das Programm über os.Exit() beendet:

package main

import (
    "fmt"
    "os"
)

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

Erstellen Sie einen entsprechenden Testfall:

package main

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

func TestCrasher(t *testing.T) {
    // Check if the BE_CRASHER environment variable is set to 1.
    if os.Getenv("BE_CRASHER") == "1" {
        Crasher()
        return
    }

    // Construct a command to re-run the test binary, limiting its execution to TestCrasher.
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    // Set additional environment variables.
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")

    // Execute the command.
    err := cmd.Run()
    // Verify the exit status of the command.
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }

    // Report failure if the command ran with an unexpected exit code.
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

Dieser Testfall ruft go test in einem separaten Prozess erneut auf und isoliert die Ausführung von TestCrasher vom Rest der Suite. Außerdem wird eine Umgebungsvariable (BE_CRASHER=1) festgelegt, nach der der aufgerufene Prozess sucht und, falls vorhanden, die zu testende Funktion aufruft. Dadurch vermeiden wir Endlosschleifen und stellen sicher, dass der richtige Exit-Code validiert wird.

Das obige ist der detaillierte Inhalt vonWie teste ich Funktionen, die os.Exit() in Go aufrufen?. 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