176 go
我的包测试用例分散在多个文件中,如果我运行go test <package_name>它,则运行包中的所有测试用例.
但是没有必要运行所有这些.有没有办法指定go test要运行的文件,以便它只运行文件中定义的测试用例?
zzz*_*zzz 279
有两种方法.最简单的方法是使用-run标志并提供与您要运行的测试名称匹配的模式.
例:
$ go test -run NameOfTest
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅文档.
另一种方法是命名特定文件,其中包含您要运行的测试:
$ go test foo_test.go
Run Code Online (Sandbox Code Playgroud)
但是有一个问题.这适用于:
foo.go是package foo.foo_test.go进入package foo_test并输入'foo'.如果foo_test.go且foo.go是相同的包(常见情况),则必须命名构建所需的所有其他文件foo_test.在这个例子中它将是:
$ go test foo_test.go foo.go
Run Code Online (Sandbox Code Playgroud)
我建议使用这个-run模式.或者,在可能的情况下,始终运行所有包测试.
Tom*_*Tom 113
@ zzzz的答案大部分是完整的,但为了避免其他人不必浏览引用的文档,您可以在包中运行单个测试,如下所示:
go test packageName -run TestName
Run Code Online (Sandbox Code Playgroud)
请注意,您要传入测试的名称,而不是传递测试的文件名.
该-run标志实际上接受正则表达式,因此您可以将测试运行限制为一类测试.来自文档:
-run regexp
Run only those tests and examples matching the regular
expression.
Run Code Online (Sandbox Code Playgroud)
Fra*_*ula 10
运行单个测试时,我通常会执行以下操作:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
Run Code Online (Sandbox Code Playgroud)
-count 1还可以确保每次都运行测试,而不是对其进行缓存。在针对比赛条件进行测试并且仅在某些时候失败的情况下很有用。在不使用模块的Go版本中,可以通过设置实现相同的功能,GOCACHE=off但这与Go模块的交互作用较差。
小智 7
Visual Studio Code 在 Go 测试文件的顶部显示一个链接,可让您运行该文件中的所有测试。
在“输出”窗口中,您可以看到它自动生成一个正则表达式,其中包含当前文件中的所有测试名称:
Running tool: C:\Go\bin\go.exe test -timeout 30s -run ^(TestFoo|TestBar|TestBaz)$ rootpackage\mypackage
注意:第一次在 VS Code 中打开 Go 文件时,它会自动为您安装一些 Go 扩展。我认为上述要求您之前已经接受了安装提议。
go test -v ./<package_name> -run Test
Run Code Online (Sandbox Code Playgroud)
防止缓存测试结果。
go test -count=1 ./<package_name> -run Test
Run Code Online (Sandbox Code Playgroud)
在intelliJ IDEA go-lang插件中(我假设在jetbrains Gogland中),您可以在运行>编辑配置下将测试种类设置为文件
小智 5
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
Run Code Online (Sandbox Code Playgroud)