为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Golang 中测试参数的传递?

如何在 Golang 中测试参数的传递?

Go
Smart猫小萌 2021-11-22 16:14:07
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。


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信