我的包测试用例分散在多个文件中,如果我运行go test <package_name>,它将运行包中的所有测试用例。

但是,没有必要运行所有这些程序。是否有一种方法可以为go测试指定一个文件来运行,以便它只运行文件中定义的测试用例?


当前回答

go test -v ./<package_name> -run Test

防止缓存测试结果。

go test -count=1 ./<package_name> -run Test

其他回答

@zzzz的回答基本上是完整的,但为了让其他人不必深入研究参考文档,你可以在包中运行一个测试,如下所示:

go test packageName -run TestName

注意,您希望传递测试的名称,而不是测试存在的文件名。

run标志实际上接受一个正则表达式,因此您可以将测试运行限制为一类测试。从文档中可以看出:

-run regexp
    Run only those tests and examples matching the regular
    expression.
go test -v ./<package_name> -run Test

防止缓存测试结果。

go test -count=1 ./<package_name> -run Test

当运行单个测试时,我通常会这样做:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1还确保测试每次都运行,而不是被缓存。在针对竞争条件进行测试,并且测试有时会失败时非常有用。在不使用模块的Go版本中,可以通过设置GOCACHE=off来实现相同的效果,但这与Go模块的交互很差。

go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)

TestFunc必须在该包的go test文件中 我们可以提供一个正则表达式来匹配一组测试用例,或者仅仅提供精确的测试用例函数来运行单个测试用例。例如-运行TestCaseFunc

我遇到了一些问题,从我的包中运行一个特定的测试,这就是我解决的方法

go test -v -race ./parsers/xml2csv/stld/ -timeout 30s -run '^Test_stldItemParser_readNodes$'

如果我运行时没有单引号,它就无法工作,我在Ubuntu-20.04中使用oh-my-zsh

Here

-v             for verbosity
-race          to detect race condition
-timeout       for the timeout of the test

这是可选的,可以省略,但很好添加。