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