Testen der Übergabe von Argumenten in Golang
In Golang ist die Übergabe von Argumenten an eine Funktion eine gängige Methode zur Bereitstellung von Eingaben. Das Testen der Korrektheit der Argumentübergabe ist entscheidend, um die Zuverlässigkeit Ihres Codes sicherzustellen.
Die Herausforderung
Bedenken Sie den folgenden Codeausschnitt:
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 }
Wenn das Argument -user=bla an dieses Programm übergeben wird, wird korrekterweise „Ihr Benutzername ist ‚bla‘“ ausgegeben. Die Herausforderung besteht darin, einen Test zu erstellen, der dieses Verhalten überprüft, ohne den Code jedes Mal manuell erstellen und ausführen zu müssen.
Der Versuch
Man könnte os.Args verwenden um das Argument in einem Test bereitzustellen:
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) } }
Bei der Ausführung dieses Tests jedoch das Ergebnis ist:
Your username is "root". Your username is "root". --- FAIL: TestArgs (0.00s) args_test.go:15: Test failed, expected: 'bla', got: 'root' FAIL coverage: 87.5% of statements FAIL tool 0.008s
Die Lösung
Das Problem ist, dass os.Args eine globale Variable ist, sodass der Anfangswert von ["args"] durch überschrieben wird den Test und wirkt sich auf andere Teile des Programms aus. Um dieses Problem zu beheben, können wir den ursprünglichen Wert beibehalten und ihn nach dem Test wiederherstellen:
oldArgs := os.Args defer func() { os.Args = oldArgs }() os.Args = []string{"cmd", "-user=bla"} // ...
Das obige ist der detaillierte Inhalt vonWie kann man die Argumentübergabe in Golang-Funktionen effektiv testen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!