我用go test ./... -v -short.不幸的是,-v它只打印出每个测试,但不会像 Java 那样在底部留下结果摘要。这意味着如果顶部某处有任何测试失败,我必须向上滚动并查找该词FAIL或在文本编辑器中搜索它。该-failfast标志也无济于事,因为出于某种原因,我的一些测试在第一次测试失败后仍会打印出来。我真的不在乎测试是否在初始测试失败后运行。我只想能够轻松判断是否有任何测试失败,最好只在一个地方(例如,有多少测试通过或失败的摘要,或者通过查看所有测试是否通过的标志)。有没有一种方法可以轻松判断是否存在测试失败,因为如果我仍然有测试失败,我不想不小心继续编码。我在 Windows 10 64 位上。后来我意识到我还想看到错误描述以及测试失败,但不想运行go test两次。这是我为 CMD 想出的(不适用于 Powershell):go test ./... -v -short > test-results.txt & findstr "FAIL _test" test-results.txt现在findstr应该报告测试失败以及错误描述。如果您想查看完整的测试结果,只需打开test-results.txt.
4 回答
![?](http://img1.sycdn.imooc.com/5333a2320001acdd02000200-100-100.jpg)
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
FAIL
失败的测试在输出中用指示。所以你所要做的就是过滤那个词的输出。
在 Unix 系统上:
go test ./... |grep FAIL
在 Windows 上:
go test ./... |findstr FAIL
请注意,这是纯文本处理,它对 go 测试及其结果一无所知。FAIL
这意味着即使测试成功,如果测试输出该词,您也可能会得到“误报” 。但实际上,这几乎可以完成您想要的工作。
实现此目的的一种更复杂、更准确的方法是将-json
标志传递给go test
,因此它会生成 JSON 输出,您可以使用程序(例如,用 Go 本身编写)对其进行处理。失败的测试用具有字段的 JSON 对象指示"Action":"fail"
,例如
{"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\""
![?](http://img1.sycdn.imooc.com/545863f50001df1702200220-100-100.jpg)
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
我发现安装gotestsum并在最后得到简洁的摘要是很轻松的。
go install gotest.tools/gotestsum@latest gotestsum --format testname # Or dots
如果您只关心计数,另一种方法是:
go test |grep FAIL |wc -l
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
达令说
TA贡献1821条经验 获得超6个赞
-json
带有标志的更结构化的方法jq
可以列出所有失败的测试,如下所示:
go test | jq -r 'select(.Action == "fail") | select(.Test | . != null) | .Test'
选择操作失败的地方
仅为单个测试选择输出并过滤那些没有测试密钥的输出
选择测试名称
- 4 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消