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