我的包测试用例分散在多个文件中,如果我运行go test <package_name>
它会运行包中的所有测试用例。
但是,没有必要运行所有这些。有没有办法指定go test
要运行的文件,以便它只运行文件中定义的测试用例?
我的包测试用例分散在多个文件中,如果我运行go test <package_name>
它会运行包中的所有测试用例。
但是,没有必要运行所有这些。有没有办法指定go test
要运行的文件,以便它只运行文件中定义的测试用例?
有两种方法。最简单的方法是使用-run
标志并提供与您要运行的测试名称匹配的模式。例子:
go test packageName -run NameOfTest
有关更多信息,请参阅文档。请注意,如果该-run
标志包含 string ,则该标志也可以运行其他测试
NameOfTest
,因为该-run
标志与正则表达式匹配。因此,为了确保只运行一个名为“NameOfTest”的测试,必须使用正则表达式^NameOfTest$
:
go test -run "^NameOfTest$"
另一种方法是命名特定文件,其中包含您要运行的测试:
go test -v foo_test.go
但有一个问题。如果:
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
模式。或者,在可能的情况下,始终运行所有包测试。
@zzzz 的答案大部分是完整的,但只是为了让其他人不必深入研究引用的文档,您可以在包中运行单个测试,如下所示:
go test packageName -run TestName
请注意,您要传入测试的名称,而不是测试所在的文件名。
该-run
标志实际上接受一个正则表达式,因此您可以将测试运行限制为一类测试。从文档:
-run regexp
Run only those tests and examples matching the regular
expression.
在运行单个测试时,我通常会这样做:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1
还确保每次都运行测试而不是被缓存。当您针对竞争条件进行测试并且测试有时会失败时很有用。在不使用模块的Go 版本中,同样可以通过设置来实现,GOCACHE=off
但这与 Go 模块的交互很差。
go test -v ./<package_name> -run Test
防止缓存测试结果。
go test -count=1 ./<package_name> -run Test
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
我在从我的包中运行单个特定测试时遇到了一些问题,这就是我解决的方法
go test -v -race ./parsers/xml2csv/stld/ -timeout 30s -run '^Test_stldItemParser_readNodes$'
如果我在没有单引号的情况下运行它就不起作用我oh-my-zsh
使用Ubuntu-20.04
这里
-v for verbosity
-race to detect race condition
-timeout for the timeout of the test
这是可选的,可以省略,但很好添加。
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
go
在该包的测试文件中-run TestCaseFunc