Menguji Kelulusan Hujah di Golang
Di Golang, menghantar hujah kepada fungsi ialah cara biasa untuk memberikan input. Menguji ketepatan hantaran hujah adalah penting untuk memastikan kebolehpercayaan kod anda.
Cabarannya
Pertimbangkan coretan kod berikut:
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 }
Apabila menghantar argumen -user=bla kepada program ini, ia mencetak dengan betul "Nama pengguna anda ialah 'bla'." Cabarannya ialah untuk mencipta ujian yang mengesahkan tingkah laku ini tanpa perlu membina dan menjalankan kod secara manual setiap kali.
Percubaan
One might尝试使用 os.Args untuk menyediakan hujah dalam ujian:
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) } }
Walau bagaimanapun, apabila menjalankan ujian ini, hasilnya ialah:
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
Penyelesaian
Isunya ialah os.Args ialah pembolehubah global, jadi nilai awal ["args"] ditimpa oleh ujian, menjejaskan bahagian lain program. Untuk menyelesaikan masalah ini, kami boleh mengekalkan nilai asal dan memulihkannya selepas ujian:
oldArgs := os.Args defer func() { os.Args = oldArgs }() os.Args = []string{"cmd", "-user=bla"} // ...
Atas ialah kandungan terperinci Bagaimana Menguji Hantaran Hujah dalam Fungsi Golang dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!