这个问题类似于go test flag: flagprovidedbutnotdefine,但是由于该问题不包含最小的示例并且答案非常高级,所以我再次询问它。main.go在带有 a和 a 的Go 模块中main_test.go,
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main_test.go\nRun Code Online (Sandbox Code Playgroud)\n定义main.go了一个sayHi标志:
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main_test.go\nRun Code Online (Sandbox Code Playgroud)\n这main_test.go只是一个占位符测试:
package main\n\nimport (\n "flag"\n "fmt"\n)\n\nvar sayHi bool\n\nfunc init() {\n flag.BoolVar(&sayHi, "sayHi", false, "Say hi or not")\n flag.Parse()\n}\n\nfunc main() {\n if sayHi {\n fmt.Println("Hi!")\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n问题是,如果我尝试运行测试,我会收到“提供标志但未定义”错误:
\n> go test ./...\nflag provided but not defined: -test.testlogfile\nUsage of /var/folders/tp/s7nwwdws1wj0z8s0vftppnnc0000gn/T/go-build952058535/b001/my-module.test:\n -sayHi\n Say hi or not\nFAIL github.com/kurtpeek/my-module 0.192s\nFAIL\nRun Code Online (Sandbox Code Playgroud)\n从上述问题的回答来看,
\n\n\n您必须确保所有标志定义在调用之前发生
\nflag.Parse(),通常是通过在函数内定义所有标志来实现init()。
我不明白这里怎么没有这样做?
\n小智 0
使用以下命令创建测试二进制文件,然后使用您的参数执行它。
> go test -c -o test
./test --sayHi=true
PASS
Run Code Online (Sandbox Code Playgroud)
go test 命令不会将参数传递给底层测试。