Go语言 如何轻松找出哪些测试失败

8hhllhi2  于 2023-03-27  发布在  Go
关注(0)|答案(3)|浏览(101)

我用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即可。

sgtfey8w

sgtfey8w1#

失败的测试在输出中用FAIL表示。所以你所要做的就是过滤输出中的那个词。
在Unix系统上:

go test ./... |grep FAIL

在Windows上:

go test ./... |findstr FAIL

请注意,这是纯文本处理,它不知道任何关于go测试及其结果的信息。这意味着,如果测试输出单词FAIL,即使它成功了,你也可能会得到“误报”。但实际上,这基本上完成了你想要的工作。
一个更复杂、更准确的方法是将-json flag传递给go test,这样它就生成了JSON输出,你可以用程序(例如用Go语言编写的程序)来处理。

{"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\""
t9aqgxwy

t9aqgxwy2#

我发现安装gotestsum并在最后得到整洁的摘要是毫无痛苦的。

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

另一种方法,如果你只关心 count

go test |grep FAIL |wc -l
zf9nrax1

zf9nrax13#

这就是我的工作原理:

go test | grep -B 1 -A 11 "Error Trace"

相关问题