Heim >Backend-Entwicklung >Golang >Wie teste ich os.Exit-Szenarien in Go?

Wie teste ich os.Exit-Szenarien in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 15:11:03553Durchsuche

How to Test os.Exit Scenarios in Go?

OS.Exit-Szenarien in Go testen

In Go beendet die Funktion os.Exit die aktuelle Programmausführung, was das Testen erschwert Szenarien mit Programmabbruch. Ein Ansatz zur Lösung dieses Problems besteht darin, separate Prozess- und Unterprozessprüfungen zu verwenden.

Beispiel:

Betrachten Sie die folgende Funktion:

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

Um diese Funktion zu testen, erstellen wir einen separaten Testfall und rufen die Funktion in einem separaten Prozess auf.

Testen Fall:

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

In diesem Testfall:

  • Wir prüfen, ob die Umgebungsvariable BE_DOOMED auf „1“ gesetzt ist, was anzeigt, dass wir uns in einer sekundären Umgebung befinden Prozessaufruf.
  • Wenn festgelegt, rufen wir die zum Scheitern verurteilte Funktion auf und kehren dann zurück, wobei wir den sekundären Prozess verlassen würdevoll.
  • Wenn nicht festgelegt, initiieren wir einen sekundären Prozessaufruf mit exec.Command und beschränken die Ausführung auf die aktuelle Testfunktion (-test.run=TestDoomed).
  • Wir übergeben BE_DOOMED Flag als Umgebungsvariable im sekundären Prozess.
  • Wenn der sekundäre Prozess abgeschlossen ist, überprüfen wir den Exit-Code mit exec.ExitError. Der Erfolg wird zurückgegeben, wenn der Prozess mit einem Fehler beendet wurde. Fehler, wenn es ohne Fehler erfolgreich war.

Dieser Ansatz ermöglicht es uns, den os.Exit-Aufruf in einem separaten Prozess zu isolieren und so sicherzustellen, dass er keine Auswirkungen auf andere Tests hat.

Das obige ist der detaillierte Inhalt vonWie teste ich os.Exit-Szenarien in Go?. 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