測試 Golang 中的參數傳遞
在 Golang 中,可以使用標誌將參數傳遞給函數。要測試參數的傳遞,可以寫一個測試來模擬命令列參數的傳遞。
問題
執行以下測試時:
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) } }
測試失敗,並顯示錯誤訊息,指示預期結果(「bla」)與實際結果不符(“root”)。
解
出現問題的原因是 os.Args 中的第一個值是執行檔本身的路徑。要解決此問題,應更新os.Args 切片以包含可執行檔和參數:
os.Args = []string{"cmd", "-user=bla"}
此外,os.Args 是全域變量,因此建議保存原始狀態並測試結束後恢復,防止幹擾其他測試:
oldArgs := os.Args defer func() { os.Args = oldArgs }()
以上是如何正確測試 Golang 中的參數傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!