在 Golang中測試參數傳遞
考慮以下程式碼:
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 }
我們將參數傳遞給已編譯的使用以下指令編寫程式碼:
./args -user=bla
這將顯示以下內容輸出:
Your username is "bla"
測試方法
為了避免手動編譯和執行,我們的目標是寫一個測試來驗證參數傳遞。我們建立一個測試函數:
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) } }
問題
當我們執行測試時,我們遇到了意想不到的結果:
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
參數「bla」未傳遞給函數,導致顯示「root」使用者名稱。
解
問題在於設定os.Args。 os.Args 中的第一個參數是可執行檔本身的路徑。為了解決這個問題,我們對其進行如下修改:
os.Args = []string{"cmd", "-user=bla"}
此外,最好保存原始 os.Args 狀態並在依賴正確參數的其他測試後恢復它。
以上是如何正確測試Go中的參數傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!