【问题标题】:Why doesn't raise "go test -run testThatDoesNotExist" an error?为什么不引发“go test -run testThatDoesNotExist”错误?
【发布时间】:2016-06-11 20:16:01
【问题描述】:

我刚刚偶然发现了一个让我感到好奇的情况。我花了半个小时弄清楚为什么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

【问题讨论】:

  • 在旁边:添加 -v 以获取您的测试的 fmt.Println
  • 是的,我通常会这样做。我真的很喜欢t.Log()t.Logf() 方法!此处省略,因为它对示例没有影响。
  • 好吧,使用-run 标志,您可以明确选择要运行的测试。如果选择none,我认为不执行任何测试而不引发任何错误是正确的。
  • 否则无法执行基准测试,因为在这种情况下您必须关闭测试。

标签: unit-testing testing go


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 2017-08-26
    • 1970-01-01
    • 2014-12-11
    • 2021-10-17
    • 2016-10-12
    • 2018-08-18
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多