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

176 go

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

但是没有必要运行所有这些.有没有办法指定go test要运行的文件,以便它只运行文件中定义的测试用例?

zzz*_*zzz 279

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

例:

$ go test -run NameOfTest
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档.

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

$ go test foo_test.go
Run Code Online (Sandbox Code Playgroud)

但是有一个问题.这适用于:

  • foo.gopackage foo.
  • foo_test.go进入package foo_test并输入'foo'.

如果foo_test.gofoo.go是相同的包(常见情况),则必须命名构建所需的所有其他文件foo_test.在这个例子中它将是:

$ go test foo_test.go foo.go
Run Code Online (Sandbox Code Playgroud)

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

  • 您介意详细说明使用“-run”的第一种(简单)方法吗?我找不到任何关于该的手册参考。 (2认同)

Tom*_*Tom 113

@ zzzz的答案大部分是完整的,但为了避免其他人不必浏览引用的文档,您可以在包中运行单个测试,如下所示:

go test packageName -run TestName
Run Code Online (Sandbox Code Playgroud)

请注意,您要传入测试的名称,而不是传递测试的文件名.

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

-run regexp
    Run only those tests and examples matching the regular
    expression.
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是包名是完整的包名,例如"github.com/you/stuff/a/b/c" (20认同)
  • 1.9.3 也接受包的相对路径。 (4认同)
  • 不知道为什么,但出于某种原因,我应该在包名前指定“./” (4认同)

Fra*_*ula 10

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

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
Run Code Online (Sandbox Code Playgroud)

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


小智 7

Visual Studio Code 在 Go 测试文件的顶部显示一个链接,可让您运行该文件中的所有测试。

在此输入图像描述

在“输出”窗口中,您可以看到它自动生成一个正则表达式,其中包含当前文件中的所有测试名称:

Running tool: C:\Go\bin\go.exe test -timeout 30s -run ^(TestFoo|TestBar|TestBaz)$ rootpackage\mypackage

注意:第一次在 VS Code 中打开 Go 文件时,它会自动为您安装一些 Go 扩展。我认为上述要求您之前已经接受了安装提议。


Del*_*ele 6

go test -v ./<package_name> -run Test
Run Code Online (Sandbox Code Playgroud)

防止缓存测试结果。

go test -count=1 ./<package_name> -run Test
Run Code Online (Sandbox Code Playgroud)


rob*_*ing 5

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

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

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

小智 5

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

go test -v -run $(cat coordinator_test.go | testcases)
Run Code Online (Sandbox Code Playgroud)