为什么不提出“go test -run testThatDoesNotExist”错误?

时间:2016-06-11 20:16:02

标签: unit-testing testing go

我偶然发现了让我好奇的情况。我花了半个小时来弄清楚为什么go test -run testWrittenWithSmallT没有执行我的测试。除非我用一个小的 t 而不是 T 拼写它,我注意到如果给定的测试方法不存在,go test会通过。

小背景:最初我想知道为什么我的测试没有打印fmt.Printlnstdout,或者至少我认为这是错误。仅过了一段时间,我发现测试根本没有执行。

所以我想知道,有什么理由应该默默地通过吗?

示例go文件:

package helloworld

import(
  "fmt"
  "testing"
)

func testWithSmallT(t *testing.T) {
    fmt.Println("test with small t executed")
}

func TestWithCapitalT(t *testing.T) {
    fmt.Println("test with capital T executed")
}

测试结果:

$go test -run testWithSmallT
PASS
ok      starsheriff.net/helloworld  0.004s

$go test -run TestWithCapitalT
test with capital T executed
PASS
ok      starsheriff.net/helloworld  0.003s

$go test -run TestDoesNotExist
PASS
ok      starsheriff.net/helloworld  0.004s

1 个答案:

答案 0 :(得分:0)

Go 现在在 -run 正则表达式不匹配任何内容时发出警告。

$go test -run TestDoesNotExist
testing: warning: no tests to run
PASS
ok      starsheriff.net/helloworld  0.179s

我认为之前的推理是因为您正在传递带有 -run 标志的正则表达式,如果您传递的内容与任何测试都不匹配,它应该通过,因为从技术上讲,所有(零)测试都通过了,并没有失败。

之前使用 -v 传递详细 (-run) 标志可能更好,这样您始终可以看到哪些测试正在运行,而不仅仅是哪些测试失败了。在详细模式下, go test 总是会打印出一条通过测试的消息,所以至少你会看到根本没有测试运行。有了警告消息,不再需要使用 -v 运行测试。