Heim > Backend-Entwicklung > Golang > Wie teste ich „os.Exit'-Szenarien in Go, ohne dass Ihre Testsuite abstürzt?

Wie teste ich „os.Exit'-Szenarien in Go, ohne dass Ihre Testsuite abstürzt?

Patricia Arquette
Freigeben: 2024-11-13 12:17:02
Original
616 Leute haben es durchsucht

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

OS.exit-Szenarien in Go testen

In Go stoppt die os.Exit-Funktion die Programmausführung und beendet das Betriebssystem. Aber wie testen wir Szenarien mit os.Exit innerhalb einer Testsuite, ohne andere Tests zu beeinträchtigen?

Betrachten Sie den folgenden Code:

func doomed() {
  os.Exit(1)
}
Nach dem Login kopieren

Um zu testen, dass der Aufruf von „doomed“ zu einem Exit führt, haben wir kann es nicht einfach innerhalb des Tests aufrufen, da dies auch den Testläufer beenden würde. Lassen Sie uns stattdessen den von Andrew Gerrand demonstrierten Ansatz untersuchen.

Gerrands Methode besteht darin, den Test in einem separaten Prozess auszuführen. Dadurch können wir den os.Exit-Aufruf innerhalb des separaten Prozesses kapseln und sicherstellen, dass er keine Auswirkungen auf den Haupttestläufer hat.

So funktioniert es:

// 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)
}
Nach dem Login kopieren

Dieser Test ruft go auf Testen Sie erneut in einem separaten Prozess und zielen Sie nur auf den TestCrasher-Test ab. Es legt eine Umgebungsvariable (BE_CRASHER) fest, nach der der Unterprozess sucht. Wenn festgelegt, ruft der Unterprozess Crasher auf und wird sofort beendet, um eine unendliche Rekursion zu vermeiden.

In der Zwischenzeit kann der ursprüngliche Testprozess dann den Exit-Code des Unterprozesses validieren und so sicherstellen, dass er wie erwartet beendet wurde.

Das obige ist der detaillierte Inhalt vonWie teste ich „os.Exit'-Szenarien in Go, ohne dass Ihre Testsuite abstürzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage