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

时间:2013-06-05 09:14:30

标签: go

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

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

8 个答案:

答案 0 :(得分:236)

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

示例:

$ go test -run NameOfTest

有关详细信息,请参阅docs

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

$ go test foo_test.go

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

  • foo.go位于package foo
  • foo_test.go位于package foo_test并导入'foo'。

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

$ go test foo_test.go foo.go

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

答案 1 :(得分:105)

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

go test packageName -run TestName

请注意,您要传入测试名称,测试所在的文件名。

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

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

答案 2 :(得分:4)

在intelliJ IDEA go-lang插件中(我假设在jetbrains Gogland中)你可以在 run&gt;下设置测试类型到文件。编辑配置

screenshot create go test on go file

答案 3 :(得分:4)

运行单个测试时,我通常会这样做:

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

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:0)

go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc必须位于该软件包中的go测试文件中
  • 我们可以提供一个正则表达式来匹配一组测试用例,或者仅提供确切的测试用例函数来运行一个测试用例。例如-run TestCaseFunc

答案 6 :(得分:0)

[0] => Array
    (
        [id] => 104
        [book_id] => 32
        [price] => 55
    )

[1] => Array
    (
        [id] => 117
        [book_id] => 76
        [price] => 65
    )

[2] => Array
    (
        [id] => 135
        [book_id] => 77
        [price] => 65
    )

[3] => Array
    (
        [id] => 100
        [book_id] => 78
        [price] => 65
    )

[4] => Array
    (
        [id] => 110
        [book_id] => 21
        [price] => 85
    )

[5] => Array
    (
        [id] => 107
        [book_id] => 35
        [price] => 90
    )

[6] => Array
    (
        [id] => 108
        [book_id] => 64
        [price] => 90
    )

[7] => Array
    (
        [id] => 130
        [book_id] => 101
        [price] => 100
    )

防止缓存测试结果。

price

答案 7 :(得分:0)

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

enter image description here

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

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

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