我用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
。
答案 0 :(得分:2)
失败测试在输出中以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"'
Windows:
go test ./... -json |findstr /C:"\"Action\":\"fail\""