我偶然发现了让我好奇的情况。我花了半个小时来弄清楚为什么go test -run testWrittenWithSmallT
没有执行我的测试。除非我用一个小的 t 而不是 T 拼写它,我注意到如果给定的测试方法不存在,go test
会通过。
小背景:最初我想知道为什么我的测试没有打印fmt.Println
到stdout
,或者至少我认为这是错误。仅过了一段时间,我发现测试根本没有执行。
所以我想知道,有什么理由应该默默地通过吗?
示例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
答案 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
运行测试。