我用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 回答

慕尼黑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\""

尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
我發現安裝gotestsum并在最后得到簡潔的摘要是很輕松的。
go?install?gotest.tools/gotestsum@latest gotestsum?--format?testname?#?Or?dots
如果您只關心計數,另一種方法是:
go?test?|grep?FAIL?|wc?-l

達令說
TA貢獻1821條經驗 獲得超6個贊
-json
帶有標志的更結構化的方法jq
可以列出所有失敗的測試,如下所示:
go test | jq -r 'select(.Action == "fail") | select(.Test | . != null) | .Test'
選擇操作失敗的地方
僅為單個測試選擇輸出并過濾那些沒有測試密鑰的輸出
選擇測試名稱
- 4 回答
- 0 關注
- 233 瀏覽
添加回答
舉報
0/150
提交
取消