首页 >后端开发 >Golang >如何正确测试Go中的参数传递?

如何正确测试Go中的参数传递?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-15 06:48:14872浏览

How to Correctly Test Argument Passing in Go?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn