【问题标题】:How to easily find out which tests fail如何轻松找出哪些测试失败
【发布时间】:2019-03-01 10:21:04
【问题描述】:

我用go test ./... -v -short 测试我的代码。

不幸的是,-v 只会在每个测试发生时打印出来,但不会像在 Java 中那样在底部留下结果摘要。这意味着如果任何测试在顶部某处失败,我必须向上滚动并查找单词 FAIL 或在文本编辑器中搜索。

-failfast 标志也无济于事,因为由于某种原因,在第一次测试失败后,我的一些测试仍然会被打印出来。

我并不关心在初始测试失败后是否运行测试。我只想能够轻松判断 任何 测试是否失败,最好只在一个地方(例如,多少测试通过或失败的摘要,或通过查看标志如果所有测试都通过了)。

有没有一种方法可以轻松判断是否有测试失败,因为如果我仍然有测试失败,我不想意外地继续编码。

我使用的是 64 位 Windows 10。

更新:非常感谢@icza 提供findstr 提示。后来我意识到我也想看到错误描述以及测试失败,但不想运行go test 两次。这是我为 CMD 提出的(不适用于 Powershell):

go test ./... -v -short > test-results.txt & findstr "FAIL _test" test-results.txt

现在findstr 应该报告测试失败以及错误描述。如果您想查看完整的测试结果,只需打开test-results.txt。

【问题讨论】:

  • go test ./... |grep FAIL - 这对你有用吗?
  • @icza 不,grep 给了我错误:grep : The term 'grep' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
  • @icza 我刚刚意识到可能需要在 Windows 上安装 grep。让我看看我能不能让它工作......
  • grep 是一个 unix 命令。如果您没有,请告诉我们您使用的是什么操作系统。
  • 在 Windows 上,您可以像这样使用findstr:go test ./... |findstr FAIL

标签: unit-testing go testing


【解决方案1】:

失败的测试在输出中用FAIL 表示。因此,您所要做的就是过滤该单词的输出。

在 Unix 系统上:

go test ./... |grep FAIL

在 Windows 上:

go test ./... |findstr FAIL

请注意,这是纯文本处理,它对 go 测试及其结果一无所知。这意味着如果测试输出单词FAIL,即使它成功,您也可能会得到“误报”。但在实践中,这几乎可以完成您想要的工作。

实现此目的的更复杂和更准确的方法是将-json 标志传递给go test,因此它会生成 JSON 输出,您可以使用程序(例如用 Go 本身编写)对其进行处理。失败的测试用具有"Action":"fail" 字段的 JSON 对象表示,例如

{"Time":"2019-03-01T12:06:21.108544405+01:00","Action":"fail",
 "Package":"some/package","Test":"TestSomething","Elapsed":0.01}

即使您不想为此编写程序,过滤 JSON 输出也会减少误报的机会(过滤 "Action":"fail"):

Unix:

go test ./... -json |grep '"Action":"fail"'

窗户:

go test ./... -json |findstr /C:"\"Action\":\"fail\""

【讨论】:

  • 如果只需要知道是否有故障,返回码就说明了一切。
  • @leafbebop 是的,但询问者明确表示他想知道哪些测试失败了。
【解决方案2】:

我发现安装gotestsum 并在最后得到简洁的摘要很容易。

go install gotest.tools/gotestsum@latest
gotestsum --format testname # Or dots

如果您只关心计数,另一种选择是:

go test |grep FAIL |wc -l

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多