我的包测试用例分散在多个文件中,如果我运行go test <package_name>
,它会运行包中的所有测试用例。
虽然没有必要运行所有这些。有没有办法指定运行go test
的文件,以便它只运行文件中定义的测试用例?
答案 0 :(得分:236)
有两种方法。最简单的方法是使用-run
标志,并提供与您要运行的测试名称相匹配的模式。
示例:
$ go test -run NameOfTest
有关详细信息,请参阅docs。
另一种方法是命名特定文件,其中包含您要运行的测试:
$ go test 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
模式。或者,在可能的情况下,始终运行所有包测试。
答案 1 :(得分:105)
@ zzzz的答案大部分都是完整的,但为了避免其他人不必浏览引用的documentation,您可以在包中运行单个测试,如下所示:
go test packageName -run TestName
请注意,您要传入测试名称,不测试所在的文件名。
-run
标志实际上接受正则表达式,因此您可以将测试运行限制为一类测试。来自文档:
-run regexp
Run only those tests and examples matching the regular
expression.
答案 2 :(得分:4)
答案 3 :(得分:4)
运行单个测试时,我通常会这样做:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1
还可以确保每次都运行测试,而不是对其进行缓存。在针对比赛条件进行测试并且仅在某些时候失败的情况下很有用。在不使用modules的Go版本中,可以通过设置GOCACHE=off
来达到相同的目的,但这与Go模块的交互作用很差。
答案 4 :(得分:3)
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
答案 5 :(得分:0)
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
go
测试文件中-run TestCaseFunc
答案 6 :(得分:0)
[0] => Array
(
[id] => 104
[book_id] => 32
[price] => 55
)
[1] => Array
(
[id] => 117
[book_id] => 76
[price] => 65
)
[2] => Array
(
[id] => 135
[book_id] => 77
[price] => 65
)
[3] => Array
(
[id] => 100
[book_id] => 78
[price] => 65
)
[4] => Array
(
[id] => 110
[book_id] => 21
[price] => 85
)
[5] => Array
(
[id] => 107
[book_id] => 35
[price] => 90
)
[6] => Array
(
[id] => 108
[book_id] => 64
[price] => 90
)
[7] => Array
(
[id] => 130
[book_id] => 101
[price] => 100
)
防止缓存测试结果。
price
答案 7 :(得分:0)