Go 如何在指定的文件中运行测试用例?
我的包测试用例分散在多个文件中,如果我运行Go 如何在指定的文件中运行测试用例?,go,Go,我的包测试用例分散在多个文件中,如果我运行go test它将运行包中的所有测试用例 不过,没有必要全部运行它们。是否有一种方法可以指定要运行的文件,以便只运行文件中定义的测试用例?有两种方法。最简单的方法是使用-run标志并提供 模式匹配要运行的测试的名称。例如: go test packageName -run NameOfTest 有关更多信息,请参阅。 请注意,-run标志也可以运行其他测试,如果它们包含字符串 NameOfTest,因为-run标志与regexp匹配。所以要确保只有 运
go test
它将运行包中的所有测试用例
不过,没有必要全部运行它们。是否有一种方法可以指定要运行的文件,以便只运行文件中定义的测试用例?有两种方法。最简单的方法是使用
-run
标志并提供
模式匹配要运行的测试的名称。例如:
go test packageName -run NameOfTest
有关更多信息,请参阅。
请注意,-run
标志也可以运行其他测试,如果它们包含字符串
NameOfTest
,因为-run
标志与regexp匹配。所以要确保只有
运行名为“NameOfTest”的测试时,必须使用regexp^NameOfTest$
:
go test -run "^NameOfTest$"
另一种方法是命名包含要运行的测试的特定文件:
go test -v foo_test.go
但有一个陷阱。如果:
在foo.go
中程序包foo
位于foo_test.go
中,并导入“foo”程序包foo_test
foo_test.go
和foo.go
是同一个包(常见情况),那么您
必须命名生成foo\u测试所需的所有其他文件。在本例中
将是:
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-运行testsomething reallycool./folder1/folder2/-v-计数1
-count 1
还确保每次都运行测试,而不是缓存测试。当您在比赛条件下进行测试并且测试有时失败时,此功能非常有用。在Go版本中,可以通过设置GOCACHE=off
来实现不使用相同的功能,但这与Go模块的交互很差。Go测试-v-超时30s-运行^(TestFuncRegEx)
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
- TestFunc必须位于该包中的
go
测试文件中
- 我们可以提供一个正则表达式来匹配一组测试用例,或者只提供精确的测试用例函数来运行单个测试用例。例如
-运行TestCaseFunc
进行测试-v./-运行测试
防止缓存测试结果
go test -count=1 ./<package_name> -run Test
go测试-计数=1./-运行测试
Visual Studio代码在Go测试文件顶部显示了一个链接,您可以在该文件中运行所有测试
在“输出”窗口中,您可以看到它自动生成一个正则表达式,其中包含当前文件中的所有测试名称:
运行工具:C:\Go\bin\Go.exe测试-超时30s-运行^(TestFoo | TestBar | TestBaz)$rootpackage\mypackage
注意:第一次在VS代码中打开Go文件时,它会自动为您安装一些Go扩展。我假设以上要求您之前已接受安装报价。您是否介意详细说明-run
的第一种(简单)方法?我找不到任何手动参考。当我使用命令go test utils.go utils\u test.go
时,您还可以使用go help testflag
查找有关它的信息。输出为ok命令行参数0.002s
。它不运行测试。我之所以要使用这种测试模式,是因为包中包含许多文件,除了utils之外,它们还没有编译。所以我想在处理其他文件之前完成UTIL。我该怎么做?值得注意的是,包名是完整的包名,例如“github.com/you/stuff/a/b/c”1.9.3也接受包的相对路径。不确定原因,但出于某种原因,我应该在包名之前指定“/”,您还可以将-race
标志添加到不同的go命令,如go test
,要帮助检测竞态条件发生的位置:请快速注意,如果cmd行与*\u test.go文件处于同一级别,则需要在包名前面加上。/
前缀,而不是。
go test -v ./<package_name> -run Test
go test -count=1 ./<package_name> -run Test