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

但是,没有必要运行所有这些程序。是否有一种方法可以为go测试指定一个文件来运行,以便它只运行文件中定义的测试用例?


当前回答

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

例子:

$ go test packageName -run NameOfTest

更多信息请参阅文档。

请注意,如果-run标志包含字符串NameOfTest,则-run标志也可以运行其他测试,因为-run标志与regexp匹配。

因此,为了确保只运行名为“NameOfTest”的测试, 必须使用regexp ^NameOfTest$:

$ go test -run "^NameOfTest$" 

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

$ go test foo_test.go

但有一个问题。这种方法在以下情况下很有效:

foo。Go在包foo中。 foo_test。Go位于包foo_test中,并导入'foo'。

如果foo_test。去吃吧。Go是相同的包(常见情况),那么您必须命名构建foo_test所需的所有其他文件。在这个例子中,它将是:

$ go test foo_test.go foo.go

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

其他回答

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

防止缓存测试结果。

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

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

例子:

$ go test packageName -run NameOfTest

更多信息请参阅文档。

请注意,如果-run标志包含字符串NameOfTest,则-run标志也可以运行其他测试,因为-run标志与regexp匹配。

因此,为了确保只运行名为“NameOfTest”的测试, 必须使用regexp ^NameOfTest$:

$ go test -run "^NameOfTest$" 

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

$ go test foo_test.go

但有一个问题。这种方法在以下情况下很有效:

foo。Go在包foo中。 foo_test。Go位于包foo_test中,并导入'foo'。

如果foo_test。去吃吧。Go是相同的包(常见情况),那么您必须命名构建foo_test所需的所有其他文件。在这个例子中,它将是:

$ go test foo_test.go foo.go

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

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

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

运行工具:C:\Go\bin\ Go .exe test -timeout 30s -run ^(TestFoo|TestBar|TestBaz)$ rootpackage\mypackage .exe

注意:当你第一次在VS Code中打开一个Go文件时,它会自动为你安装一些Go扩展。我假设以上要求您之前已经接受了安装的报价。

go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)

TestFunc必须在该包的go test文件中 我们可以提供一个正则表达式来匹配一组测试用例,或者仅仅提供精确的测试用例函数来运行单个测试用例。例如-运行TestCaseFunc

我遇到了一些问题,从我的包中运行一个特定的测试,这就是我解决的方法

go test -v -race ./parsers/xml2csv/stld/ -timeout 30s -run '^Test_stldItemParser_readNodes$'

如果我运行时没有单引号,它就无法工作,我在Ubuntu-20.04中使用oh-my-zsh

Here

-v             for verbosity
-race          to detect race condition
-timeout       for the timeout of the test

这是可选的,可以省略,但很好添加。