GoLang基礎(chǔ)學(xué)習(xí)之go?test測(cè)試
1.介紹
Go語(yǔ)言中的測(cè)試依賴go test命令。編寫測(cè)試代碼和編寫普通的Go代碼過(guò)程是類似的,并不需要學(xué)習(xí)新的語(yǔ)法、規(guī)則或工具; go test 命令是go語(yǔ)言內(nèi)置的命令
go test命令是一個(gè)按照一定約定和組織的測(cè)試代碼的驅(qū)動(dòng)程序
在我們執(zhí)行了go tets命令之后,這個(gè)命令會(huì)自動(dòng)的幫我們尋找當(dāng)前包下面在包目錄內(nèi)以_test.go為后綴名的源代碼文件進(jìn)行測(cè)試,同時(shí)解析內(nèi)部所有以大寫的Test開(kāi)頭的測(cè)試函數(shù)(注:不會(huì)被go build編譯到最終的可執(zhí)行文件中)
2.函數(shù)
邏輯行為:比如舉一些特例,來(lái)檢查是否達(dá)到預(yù)期值
性能基準(zhǔn)測(cè)試相當(dāng)于調(diào)用10萬(wàn)次或者1萬(wàn)次,看看它的平均的執(zhí)行時(shí)間、內(nèi)存的是申請(qǐng)、內(nèi)存的消耗等等

3.測(cè)試函數(shù)格式
3.1格式

3.2失敗示例
如下結(jié)構(gòu)以及代碼內(nèi)容



注:執(zhí)行完go test后,結(jié)構(gòu)以及代碼內(nèi)容沒(méi)有任何變化
一個(gè)中文所占的字節(jié)在uf8中至少占用的都是3個(gè)字節(jié),甚至有的是4個(gè)字節(jié),問(wèn)題出現(xiàn)在:s = s[i+1:]這一行
3.3成功示例1
如下結(jié)構(gòu)以及代碼內(nèi)容



注:執(zhí)行完命令后結(jié)構(gòu)以及代碼內(nèi)容沒(méi)有任何變化
go test:
顯示pass,說(shuō)明測(cè)試用例通過(guò)了
3.4成功示例2
如下結(jié)構(gòu)以及代碼內(nèi)容



注:執(zhí)行完命令后結(jié)構(gòu)以及代碼內(nèi)容沒(méi)有任何變化
顯示pass,說(shuō)明測(cè)試用例通過(guò)了
3.5成功示例3
如果有多個(gè)測(cè)試用例的話,可以寫成一個(gè)測(cè)試組,測(cè)試組里可以定義一個(gè)測(cè)試用例的結(jié)構(gòu)體,然后分別的創(chuàng)建多個(gè)測(cè)試用例的結(jié)構(gòu)體實(shí)例,然后寫一個(gè)for循環(huán)去跑一下這個(gè)測(cè)試用例



注:執(zhí)行完命令后結(jié)構(gòu)以及代碼內(nèi)容沒(méi)有任何變化
go test
go test -v:
可以查看的更詳細(xì)
3.6成功實(shí)例4




注:執(zhí)行完命令后結(jié)構(gòu)以及代碼內(nèi)容沒(méi)有任何變化
用t.run的話,里面?zhèn)魅胍粋€(gè)匿名函數(shù)的話,go test -v可以看的更清晰
go test -run=Split/chinese的換可以指定某個(gè)測(cè)試用例單獨(dú)測(cè)試
go test -cover校驗(yàn)測(cè)試覆蓋率(即比如我們的測(cè)試函數(shù)有6行代碼,如果我們的測(cè)試用例把這6行代碼都執(zhí)行了,那么這是最好的了,覆蓋率是100%,現(xiàn)實(shí)情況下很少有100%的情況,測(cè)試覆蓋率基本上就足夠了,
4.基準(zhǔn)函數(shù)
4.1成功實(shí)例1




注:執(zhí)行完命令后結(jié)構(gòu)以及代碼內(nèi)容沒(méi)有任何變化 go test -bench=Split :(注意:所有的數(shù)據(jù)不同的電腦都不一樣) BenchmarkSplit-16: -16是操作系統(tǒng)真正干活的進(jìn)程數(shù),不同的電腦不一樣 1731301是指Spilt執(zhí)行的次數(shù) 629.1ns是指:每一次操作耗費(fèi)629.1納秒 go test -bench=Split -benchmem: (注意:所有的數(shù)據(jù)不同的電腦都不一樣) 查看操作的內(nèi)存的數(shù)據(jù) 112 B/op: 每一次操作消耗的是112個(gè)字節(jié) 3 allocs/op : 每一次操作它會(huì)做三次的內(nèi)存申請(qǐng)(通過(guò)看這個(gè)就可以來(lái)做代碼優(yōu)化,由測(cè)試來(lái)不斷優(yōu)化我們的程序),查看代碼后發(fā)現(xiàn)原因是append會(huì)進(jìn)行內(nèi)存申請(qǐng),現(xiàn)在的解決辦法就是用make函數(shù)被做統(tǒng)一的內(nèi)存申請(qǐng)
4.2成功實(shí)例2



go test -bench=Split -benchmem: (注意:所有的數(shù)據(jù)不同的電腦都不一樣) 發(fā)現(xiàn)各個(gè)數(shù)據(jù)都減少了
4.3性能比較函數(shù)
應(yīng)用場(chǎng)景:某些函數(shù)當(dāng)我們傳入的參數(shù)變量不一樣的話,執(zhí)行的次數(shù)也不一樣,這種情景就可以用性能比較函數(shù),比如
總結(jié)
到此這篇關(guān)于GoLang基礎(chǔ)學(xué)習(xí)之go test測(cè)試的文章就介紹到這了,更多相關(guān)GoLang go test測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用GO實(shí)現(xiàn)Paxos共識(shí)算法的方法
這篇文章主要介紹了使用GO實(shí)現(xiàn)Paxos共識(shí)算法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
go使用makefile腳本編譯應(yīng)用的方法小結(jié)
makefile可以看作是make工具的腳本文件, 而make主要用來(lái)處理一系列命令。常用的比如用來(lái)編譯和打包文件, 在C/C++的編譯打包中應(yīng)用最廣泛了,這篇文章主要介紹了go使用makefile腳本編譯應(yīng)用,需要的朋友可以參考下2022-08-08
golang中拿slice當(dāng)queue和拿list當(dāng)queue使用分析
這篇文章主要為大家介紹了golang?中拿slice當(dāng)queue和拿list當(dāng)queue使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Go語(yǔ)言學(xué)習(xí)筆記之錯(cuò)誤和異常詳解
Go語(yǔ)言采用返回值的形式來(lái)返回錯(cuò)誤,這一機(jī)制既可以讓開(kāi)發(fā)者真正理解錯(cuò)誤處理的含義,也可以大大降低程序的復(fù)雜度,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)筆記之錯(cuò)誤和異常的相關(guān)資料,需要的朋友可以參考下2022-07-07
Go語(yǔ)言中常見(jiàn)的坑以及高性能編程技巧分享
代碼的穩(wěn)健性、高性能、可讀性是我們每一位coder必須去追求的目標(biāo),本文結(jié)合Go語(yǔ)言的特性做了相關(guān)總結(jié),感興趣的小伙伴可以了解一下2023-06-06

