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

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

Mary-Kate Olsen
发布: 2024-12-15 06:48:14
原创
869 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板