我的程序包测试用例分散在多个文件中,如果运行,go test <package_name>
它将运行程序包中的所有测试用例。
虽然没有必要全部运行。有没有一种方法指定go test
要运行的文件,使其仅运行文件中定义的测试用例?
我的程序包测试用例分散在多个文件中,如果运行,go test <package_name>
它将运行程序包中的所有测试用例。
虽然没有必要全部运行。有没有一种方法指定go test
要运行的文件,使其仅运行文件中定义的测试用例?
Answers:
有两种方法。一种简单的方法是使用该-run
标志并提供与您要运行的测试名称匹配的模式。
例:
$ go test -run NameOfTest
有关更多信息,请参阅文档。
另一种方法是命名包含要运行的测试的特定文件:
$ go test foo_test.go
但是有一个陷阱。如果满足以下条件,则效果很好:
foo.go
在package foo
。foo_test.go
在package foo_test
并导入“ foo”。如果foo_test.go
和foo.go
是相同的软件包(常见的情况),那么您必须命名build所需的所有其他文件foo_test
。在此示例中,它将是:
$ go test foo_test.go foo.go
我建议使用该-run
模式。或者,在可能的情况下,始终运行所有程序包测试。
go help testflag
go test utils.go utils_test.go
,输出为ok command-line-arguments 0.002s
。它不会运行测试。我之所以要使用此测试模式,是因为该软件包包含许多文件,除了utils之外,它们还没有编译。因此,我想在其他文件上的workinqg之前最终确定utils。我怎样才能做到这一点 ?
-v
(详细)标志。来自文档-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
@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 -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
go
在该程序包测试文件中-run TestCaseFunc
-run
吗?我找不到关于那个的任何手动参考。