Mar*_*ber -2 testing flags go goland go-testing
在我的 go 程序中,main 方法执行以下操作:
port := flag.Int("port", 8080, "Port number to start service on")
flag.Parse()
Run Code Online (Sandbox Code Playgroud)
我有一个虚拟测试,如下所示:
func TestName(t *testing.T) {
fmt.Println("Hello there")
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试(从 goland 或命令行)时,出现以下错误:
/usr/local/go/bin/go tool test2json -t /private/var/folders/7v/p2t5phhn6cn9hqwjnn_p95_80000gn/T/___TestName_in_github_tools....test -test.v -test.paniconexit0 -test.run ^\QTestName\E$
flag provided but not defined: -test.v
Usage of /private/var/folders/7v/p2t5phhn6cn9hqwjnn_p95_80000gn/T/___TestName_in_github_tools.....test:
-port int
Port number to start service on (default 8080)
Run Code Online (Sandbox Code Playgroud)
当我删除主文件中的标志行时,测试正常执行 请知道如何解决此问题?
提前致谢
当你运行时go test
,go 实际上将你的代码编译成可执行文件并执行它。
如果将选项添加到go test
-- 例如:go test -v
-- 这些选项实际上会传递给测试可执行文件,前缀为test
-- 所以-v
会变成-test.v
.
(这就是为什么有几个评论要求您用于运行测试的确切命令行的原因:因为错误是关于-test.v
,所以可能有一些东西会添加-v
到某些go test ...
调用中)
看起来flag.Parse()
正在尝试解析一些实际上用于测试可执行文件的参数,而不是用于您的代码。
这可能是因为在测试可执行文件有机会更改切片os.Args
以删除某些特定标志之前调用得太早。
检查什么触发了对 的调用flag.Parse()
:如果它是从init()
块执行的,则这将被视为“太早”。
选项的行为go test
记录在go help testflag
:
这些标志中的每一个都可以通过可选的“测试”进行识别。前缀,如 -test.v 中所示。然而,当直接调用生成的测试二进制文件(“go test -c”的结果)时,前缀是强制性的。
在调用测试二进制文件之前,“go test”命令会在可选包列表之前和之后酌情重写或删除已识别的标志。
例如,命令
Run Code Online (Sandbox Code Playgroud)go test -v -myflag testdata -cpuprofile=prof.out -x
将编译测试二进制文件,然后运行它
Run Code Online (Sandbox Code Playgroud)pkg.test -test.v -myflag testdata -test.cpuprofile=prof.out
归档时间: |
|
查看次数: |
3268 次 |
最近记录: |