测试 Golang 中的参数传递
在 Golang 中,可以使用标志将参数传递给函数。要测试参数的传递,可以编写一个测试来模拟命令行参数的传递。
问题
运行以下测试时:
import ( "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) } }
测试失败,并显示错误消息,指示预期结果(“bla”)与实际结果不匹配(“root”)。
解决方案
出现问题的原因是 os.Args 中的第一个值是可执行文件本身的路径。要解决此问题,应更新 os.Args 切片以包含可执行文件和参数:
os.Args = []string{"cmd", "-user=bla"}
此外,os.Args 是全局变量,因此建议保存原始状态并测试结束后恢复,防止干扰其他测试:
oldArgs := os.Args defer func() { os.Args = oldArgs }()
以上是如何正确测试 Golang 中的参数传递?的详细内容。更多信息请关注PHP中文网其他相关文章!