我的包测试用例分散在多个文件中,如果我运行go test <package_name>,它将运行包中的所有测试用例。
但是,没有必要运行所有这些程序。是否有一种方法可以为go测试指定一个文件来运行,以便它只运行文件中定义的测试用例?
我的包测试用例分散在多个文件中,如果我运行go test <package_name>,它将运行包中的所有测试用例。
但是,没有必要运行所有这些程序。是否有一种方法可以为go测试指定一个文件来运行,以便它只运行文件中定义的测试用例?
当前回答
@zzzz的回答基本上是完整的,但为了让其他人不必深入研究参考文档,你可以在包中运行一个测试,如下所示:
go test packageName -run TestName
注意,您希望传递测试的名称,而不是测试存在的文件名。
run标志实际上接受一个正则表达式,因此您可以将测试运行限制为一类测试。从文档中可以看出:
-run regexp
Run only those tests and examples matching the regular
expression.
其他回答
有两种方法。最简单的方法是使用-run标志并提供与您想要运行的测试名称匹配的模式。
例子:
$ go test packageName -run NameOfTest
更多信息请参阅文档。
请注意,如果-run标志包含字符串NameOfTest,则-run标志也可以运行其他测试,因为-run标志与regexp匹配。
因此,为了确保只运行名为“NameOfTest”的测试, 必须使用regexp ^NameOfTest$:
$ go test -run "^NameOfTest$"
另一种方法是命名包含要运行的测试的特定文件:
$ go test foo_test.go
但有一个问题。这种方法在以下情况下很有效:
foo。Go在包foo中。 foo_test。Go位于包foo_test中,并导入'foo'。
如果foo_test。去吃吧。Go是相同的包(常见情况),那么您必须命名构建foo_test所需的所有其他文件。在这个例子中,它将是:
$ go test foo_test.go foo.go
我建议使用-run模式。或者,在可能的情况下,始终运行所有包测试。
我遇到了一些问题,从我的包中运行一个特定的测试,这就是我解决的方法
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
这是可选的,可以省略,但很好添加。
@zzzz的回答基本上是完整的,但为了让其他人不必深入研究参考文档,你可以在包中运行一个测试,如下所示:
go test packageName -run TestName
注意,您希望传递测试的名称,而不是测试存在的文件名。
run标志实际上接受一个正则表达式,因此您可以将测试运行限制为一类测试。从文档中可以看出:
-run regexp
Run only those tests and examples matching the regular
expression.
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
当运行单个测试时,我通常会这样做:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1还确保测试每次都运行,而不是被缓存。在针对竞争条件进行测试,并且测试有时会失败时非常有用。在不使用模块的Go版本中,可以通过设置GOCACHE=off来实现相同的效果,但这与Go模块的交互很差。