Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menguji Hantaran Hujah dalam Go dengan Betul?
Menguji Hujah Lulus di Golang
Pertimbangkan 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 }
Kami menyampaikan hujah kepada yang disusun kod menggunakan arahan:
./args -user=bla
Ini memaparkan perkara berikut output:
Your username is "bla"
Pendekatan Pengujian
Untuk mengelakkan penyusunan dan pelaksanaan manual, kami berhasrat untuk menulis ujian yang mengesahkan kelulusan hujah. Kami mencipta fungsi ujian:
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) } }
Masalah
Apabila kami menjalankan ujian, kami menghadapi hasil yang tidak dijangka:
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
hujah "bla" tidak dihantar ke fungsi, mengakibatkan "root" seperti yang dipaparkan nama pengguna.
Penyelesaian
Isunya terletak pada penetapan os.Args. Argumen pertama dalam os.Args ialah laluan ke executable itu sendiri. Untuk membetulkannya, kami mengubah suainya seperti berikut:
os.Args = []string{"cmd", "-user=bla"}
Selain itu, adalah amalan yang baik untuk menyimpan keadaan os.Args asal dan memulihkannya selepas ujian untuk ujian lain yang bergantung pada hujah yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Menguji Hantaran Hujah dalam Go dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!