Testen der Argumentübergabe in Go
Problem:
Beim Schreiben eines Tests zur Überprüfung des Arguments Die Übergabe von Go mithilfe von os.Args führt zu unerwartetem Verhalten, bei dem das erwartete Argument nicht von empfangen wird Funktion.
Codeausschnitt:
package main import ( "flag" "fmt" "testing" "os" ) 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 } 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) } }
Versuch:
Der folgende Test schlägt fehl, was darauf hinweist, dass das Argument vorhanden ist nicht bestanden richtig:
--- FAIL: TestArgs (0.00s) args_test.go:15: Test failed, expected: 'bla', got: 'root' FAIL coverage: 87.5% of statements FAIL tool 0.008s
Lösung:
Das Problem liegt in der Zuweisung von os.Args. Die Syntax sollte wie folgt lauten:
os.Args = []string{"cmd", "-user=bla"}
Darüber hinaus wird empfohlen, den ursprünglichen Wert von os.Args vor dem Test beizubehalten und danach wiederherzustellen:
oldArgs := os.Args defer func() { os.Args = oldArgs }()
Dies verhindert, dass andere Tests ausgeführt werden von der Änderung betroffen os.Args.
Erklärung:
Das os.Args-Slice ist eine „globale Variable“, die die ursprünglichen Argumente enthält, die an das Programm übergeben wurden. Indem wir os.Args ein neues Slice zuweisen, ersetzen wir effektiv die ursprünglichen Argumente. Das erste Element von os.Args ist normalerweise der Pfad zur ausführbaren Datei. Indem wir der Argumentliste „cmd“ voranstellen, stellen wir sicher, dass die Funktion den richtigen Argumentwert erhält.
Das Wiederherstellen des ursprünglichen Werts von os.Args nach dem Test ist eine gute Vorgehensweise, um eine konsistente Umgebung für andere Tests aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWarum schlägt mein Go-Test für die Argumentübergabe mit „os.Args' fehl und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!