package mainimport ( "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"显示已传递的用户名。目的:为了防止每次都需要手动构建和运行代码来测试代码,目的是编写一个能够测试参数传递的测试。试图运行以下测试:package mainimport ( "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) }}结果是:Your username is "root".Your username is "root".--- FAIL: TestArgs (0.00s) args_test.go:15: Test failed, expected: 'bla', got: 'root'FAILcoverage: 87.5% of statementsFAIL tool 0.008s问题它看起来像那样os.Args = []string{"-user=bla不能够这个参数传递给函数的结果是root不是bla
1 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
根据我的评论,第一个值os.Args是可执行文件本身的(路径),因此os.Args = []string{"cmd", "-user=bla"}应该解决您的问题。您可以从标准包中查看标志测试,他们正在做类似的事情。
此外,作为os.Args“全局变量”,最好保持测试前的状态并在测试后恢复它。与链接测试类似:
oldArgs := os.Args
defer func() { os.Args = oldArgs }()
这在其他测试中可能很有用,例如,检查在调用 时传递的真实参数go test。
- 1 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消