如何在指定文件中运行测试用例?


205

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

虽然没有必要全部运行。有没有一种方法指定go test要运行的文件,使其仅运行文件中定义的测试用例?

go 

Answers:


326

有两种方法。一种简单的方法是使用该-run标志并提供与您要运行的测试名称匹配的模式。

例:

$ go test -run NameOfTest

有关更多信息,请参阅文档

另一种方法是命名包含要运行的测试的特定文件:

$ go test foo_test.go

但是有一个陷阱。如果满足以下条件,则效果很好:

  • foo.gopackage foo
  • foo_test.gopackage foo_test并导入“ foo”。

如果foo_test.gofoo.go是相同的软件包(常见的情况),那么您必须命名build所需的所有其他文件foo_test。在此示例中,它将是:

$ go test foo_test.go foo.go

我建议使用该-run模式。或者,在可能的情况下,始终运行所有程序包测试。


1
您介意与第一个(简单)方法进行详细说明-run吗?我找不到关于那个的任何手动参考。

1
您还可以通过go help testflag
Jeffrey Martinez

当我使用命令时go test utils.go utils_test.go,输出为ok command-line-arguments 0.002s。它不会运行测试。我之所以要使用此测试模式,是因为该软件包包含许多文件,除了utils之外,它们还没有编译。因此,我想在其他文件上的workinqg之前最终确定utils。我怎样才能做到这一点 ?
chmike '16

如果您想查看测试时记录的内容,则值得一提-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.
robstarbuck'3

121

@zzzz的答案基本上是完整的,但是只是为了避免其他人不必阅读参考文档,您可以在包中运行单个测试,如下所示:

go test packageName -run TestName

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

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

-run regexp
    Run only those tests and examples matching the regular
    expression.

28
值得注意的是,包名称是完整的包名称,例如“ github.com/you/stuff/a/b/c”
垃圾收集器2016年

1.9.3也接受包的相对路径。

2
不知道为什么,但是出于某种原因,我应该在包名称之前指定“ ./”
Roozbeh Zabihollahi

12

运行单个测试时,我通常会执行以下操作:

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

-count 1还可以确保每次都运行测试,而不是对其进行缓存。当您在竞赛条件下进行测试并且仅在某些时候失败时才有用。在不使用模块的Go版本中,可以通过设置实现相同的功能,GOCACHE=off但这与Go模块的交互作用较差。


6

在intelliJ IDEA go-lang插件中(我假设在jetbrains Gogland中),您可以在运行>编辑配置下将测试种类设置为文件

屏幕截图在go文件上创建go测试


2
在Gogland中,您可以右键单击测试文件,然后选择“ run foo_test.go”,它将使用测试构建软件包,然后将包含该测试文件中所有测试名称的正则表达式传递给-run标志。一个非常有用的功能。
Eloff

4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)

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

防止缓存测试结果。

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

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc必须位于 go在该程序包测试文件中
  • 我们可以提供一个正则表达式来匹配一组测试用例,或者提供确切的测试用例函数来运行一个测试用例。例如-run TestCaseFunc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.