Go工具鏈之代碼測試神器go?test詳解
go test 作用
go test 是 Go 工具鏈中的一個命令,用于編譯和運行按照要求編寫的 Golang 測試代碼,并生成測試報告。
要求將測試代碼所在的文件命名為 *_test.go,如此命名的文件不會被 go build 命令編譯,但是會被 go test 進行編譯和運行。在 *_test.go 中有幾種類型的函數(shù):
- 單元測試函數(shù):以 Test 為函數(shù)名的前綴,用于測試程序的邏輯行為,參數(shù)必須是t *testing.T,無返回值。
- 基準測試函數(shù):以 Benchmark 為函數(shù)名的前綴,用于測試程序的性能,參數(shù)必須是 b *testing.B,無返回值。
- 模糊測試函數(shù):以 Fuzz 為函數(shù)名的前綴,用于測試程序的健壯性,參數(shù)必須是 f *testing.F,無返回值
- 示例函數(shù):以 Example 為函數(shù)名的前綴,用于提供示例文檔,沒有參數(shù)和返回值。
go test 使用方法和使用示例
go test 的使用方法比較簡單,在項目的根目錄或者某個包下直接運行如下命令:
go test
go test 將會編譯和運行當前項目或者當前包下所有的測試代碼,并輸出測試結(jié)果。
可以通過指定包或測試文件的路徑來運行特定的測試,可以指定多個,也可以使用通配符進行匹配。例如:
go test [packages] go test xxx.go
以下是一些常用的參數(shù)說明:
- -v:顯示詳細的測試輸出,包括每個測試用例的名稱和結(jié)果。
- -run:指定要運行的測試函數(shù)的正則表達式。
- -cover:同時進行代碼覆蓋率分析,顯示代碼被執(zhí)行的情況。
- -coverprofile:將代碼覆蓋率分析的結(jié)果輸出到指定文件中。
- -count:指定測試的運行次數(shù),默認為 1 次。
- -timeout:設(shè)置測試的運行超時時間。
- -bench:運行與性能測試有關(guān)的基準測試。
- -benchmem:在運行基準測試時顯示內(nèi)存分配的統(tǒng)計信息。
這里要著重講解一下 -coverprofile 參數(shù),這個參數(shù)可以將測試用例的代碼覆蓋結(jié)果輸出到指定文件中,然后可以借助 go tool cover 來做具體的分析。來看一下帶上 -coverprofile 參數(shù)的效果,以 github.com/luduoxin/json-validator-go 項目為例,clone 代碼后,切換到項目的 validator 目錄,打開終端,執(zhí)行如下命令:
$ go test -coverprofile=c.out
截取 c.out 的前兩行內(nèi)容如下:
mode: set github.com/luduoxin/json-validator-go/validator/scanner.go:11.30,15.2 3
第二行每個部分代表的意思如下:
"文件:起始行.起始列,結(jié)束行.結(jié)束列 該基本塊中的語句數(shù)量 該基本塊被執(zhí)行到的次數(shù)"
搞清楚這個輸出內(nèi)容的格式可以做很多事情,例如自己做工具來統(tǒng)計長時間運行的項目的測試覆蓋率,就可以在執(zhí)行測試用例的過程中,先生成此種格式的文件,然后借助 go tool cover 這個工具來分析。
到此這篇關(guān)于Go工具鏈之代碼測試神器go test詳解的文章就介紹到這了,更多相關(guān)Go工具鏈go test內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go?goquery網(wǎng)頁解析實現(xiàn)示例
這篇文章主要為大家介紹了go?goquery網(wǎng)頁解析實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08聊聊go xorm生成mysql的結(jié)構(gòu)體問題
這篇文章主要介紹了go xorm生成mysql的結(jié)構(gòu)體問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-03-03win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā)
這篇文章主要介紹了win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā),需要的朋友可以參考下2014-10-10