Heim >Backend-Entwicklung >Golang >Wie teste ich Gos „Flag'-Paketargument-Parsing in Unit-Tests ordnungsgemäß?
So testen Sie die Argumentanalyse in Go
Betrachten Sie den folgenden Go-Code, der Befehlszeilenargumente mithilfe des Flag-Pakets analysiert:
package main import ( "flag" "fmt" ) func main() { passArguments() } func passArguments() string { username := flag.String("user", "root", "Username for this server") flag.Parse() fmt.Printf("Your username is %q.", *username) usernameToString := *username return usernameToString }
Um diese Funktion zu testen, können wir wie gezeigt ein Argument an den kompilierten Code übergeben unten:
./args -user=bla
Dies sollte zu der Ausgabe führen:
Your username is "bla"
Wenn wir jedoch versuchen, dieses Verhalten mit dem folgenden Test zu testen:
package main import ( "os" "testing" ) func TestArgs(t *testing.T) { expected := "bla" os.Args = []string{"-user=bla"} actual := passArguments() if actual != expected { t.Errorf("Test failed, expected: '%s', got: '%s'", expected, actual) } }
Wir erhalten eine Fehlermeldung:
FAIL coverage: 87.5% of statements FAIL tool 0.008s
Der Grund für diesen Fehler ist, dass durch einfaches Festlegen von os.Args auf ein neues Slice das Argument nicht an übergeben wird Funktion. Um dieses Problem zu lösen, müssen wir sicherstellen, dass der allererste Wert in os.Args eine (Pfad zur) ausführbare Datei selbst ist, wie in diesem überarbeiteten Test gezeigt:
func TestArgs(t *testing.T) { expected := "bla" oldArgs := os.Args defer func() { os.Args = oldArgs }() os.Args = []string{"cmd", "-user=bla"} actual := passArguments() if actual != expected { t.Errorf("Test failed, expected: '%s', got: '%s'", expected, actual) } }
Indem wir die Wiederherstellung von os.Args verschieben In seinen ursprünglichen Zustand können wir sicherstellen, dass der Test andere Tests nicht beeinträchtigt, die möglicherweise die tatsächlichen Argumente untersuchen, die beim Aufrufen des Go-Tests übergeben wurden.
Das obige ist der detaillierte Inhalt vonWie teste ich Gos „Flag'-Paketargument-Parsing in Unit-Tests ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!