Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解
概述
測(cè)試不是Go語(yǔ)言獨(dú)有的,其實(shí)在很多語(yǔ)言都有測(cè)試,例如:Go、Java、Python…
要想成為一名合格的大牛,這是程序員必須具備的一項(xiàng)技能,特別是一些大公司,這是加分的一項(xiàng),主要有如下優(yōu)點(diǎn):
代碼可以隨時(shí)測(cè)試,保證代碼不會(huì)產(chǎn)生錯(cuò)誤
寫(xiě)出更加高效的代碼
單元測(cè)試
格式:func TestXXX(t *testing.T)
//add.go package cal func Add(num1, num2 int) int { return num1 + num2 } //mul.go package cal func Mul(num1, num2 int) int { return num1 * num2 }
//add_test.go package cal import ( "testing" ) func TestAdd(t *testing.T) { sum := Add(10, 20) if sum != 30 { t.Log("10+20=", sum) } } func TestMul(t *testing.T) { sum := Mul(10, 2) if sum != 20 { t.Error("10 * 2 =", sum) } }
運(yùn)行結(jié)果如下:
//單元測(cè)試命令行 $ go test add_test.go add.go mul.go okcommand-line-arguments 0.072s $ go test -v add_test.go add.go === RUNTestAdd --- PASS: TestAdd (0.00s) === RUNTestMul --- PASS: TestMul (0.00s) PASS okcommand-line-arguments 0.070s //運(yùn)行指定單元測(cè)試用例 $ go test -v -run TestAdd add_test.go add.go mul.go === RUNTestAdd --- PASS: TestAdd (0.00s) PASS okcommand-line-arguments 0.072s
代碼說(shuō)明如下
第 1 行,在 go test
后跟 add_test.go
件,表示測(cè)試這個(gè)文件里的所有測(cè)試用例。
第 2 行,顯示測(cè)試結(jié)果,ok
測(cè)試通過(guò),command-line-arguments
用例需要用到的一個(gè)包名,0.069s
表示測(cè)試花費(fèi)的時(shí)間。
第 3 行,顯示在附加參數(shù)中添加了-v
,可以讓測(cè)試時(shí)顯示詳細(xì)的流程。
第 4-7 行,表示開(kāi)始運(yùn)行名叫 TestAdd
TestMul
用例。
第 4-7 行,表示已經(jīng)運(yùn)行完 TestAdd
TestMul
試用例,PASS 表示測(cè)試成功。
第10行,表示運(yùn)行指定的單元測(cè)試用例 主要加上-run
后面跟上你需要測(cè)試的函數(shù)(TestAdd
)
問(wèn)題
ok command-line-arguments (cached)
第一種:清除緩存 go clean -testcache
第二種:go test設(shè)置flags go test add_test.go add.go -count=1
注意
每個(gè)測(cè)試文件必須以 _test.go
結(jié)尾,不然 go test
不能發(fā)現(xiàn)測(cè)試文件
測(cè)試文件寫(xiě)在同一個(gè)包,方便測(cè)試和后期的維護(hù)
每個(gè)測(cè)試文件必須導(dǎo)入 testing
包
功能測(cè)試函數(shù)必須以 Test
開(kāi)頭,然后一般接測(cè)試函數(shù)的名字
testing.T
提供了幾種日志輸出方法
方 法 | 描述 |
---|---|
Log | 打印日志,同時(shí)結(jié)束測(cè)試 |
Logf | 格式化打印日志,同時(shí)結(jié)束測(cè)試 |
Error | 打印錯(cuò)誤日志,同時(shí)結(jié)束測(cè)試 |
Errorf | 格式化打印錯(cuò)誤日志,同時(shí)結(jié)束測(cè)試 |
Fatal | 打印致命日志,同時(shí)結(jié)束測(cè)試 |
Fatalf | 格式化打印致命日志,同時(shí)結(jié)束測(cè)試 |
直接打?。?code>Log Error
Fatal
格式化打?。?code>Logf Errorf
Fatalf
性能測(cè)試
基本使用
格式:func BenchmarkXxx(*testing.B)
//benchmark_test.go package cal import ( "fmt" "testing" ) func BenchmarkHello(b *testing.B) { for i := 0; i < b.N; i++ { fmt.Sprintf("hello") } }
測(cè)試結(jié)果如下:
$ go test -v -bench="." benchmark_test.go goos: windows goarch: amd64 BenchmarkHello-4 20000000 93.7 ns/op PASS okcommand-line-arguments 2.061s
代碼如下說(shuō)明:
第 1 行 -bench="."
表示運(yùn)行 benchmark_test.go
文件里面全部的測(cè)試,其實(shí)和-run
一樣【 -bench regexp
是可以接收一個(gè)正則,如果要運(yùn)行所以的基準(zhǔn)測(cè)試,請(qǐng)使用-bench.
or -bench=.'.
】
第 2 行 goos
表示系統(tǒng)是 windows
第 3 行 goarch
表示 操作系統(tǒng)構(gòu)架是amd64
第 4 行 BenchmarkHello-4
表示 測(cè)試名稱(chēng) , 20000000
測(cè)試的次數(shù) , 93.7 ns/op
表示表示每一個(gè)操作耗費(fèi)多少時(shí)間(納秒)
自定義測(cè)試時(shí)間
通過(guò)-benchtime
參數(shù)可以自定義測(cè)試時(shí)間,例如:
$ go test -v -benchtime=2s -bench=. benchmark_test.go goos: windows goarch: amd64 BenchmarkHello-4 30000000 85.1 ns/op PASS okcommand-line-arguments 2.714s
當(dāng)你不設(shè)置-benchtime t
時(shí),默認(rèn)值是1秒
testing.B
提供了幾種方法【testing.B
擁有testing.T
的全部接口】
方法 | 描述 |
---|---|
StartTimer() | 啟動(dòng)計(jì)時(shí) |
StopTimer() | 停止計(jì)時(shí) |
ResetTimer | 重置計(jì)時(shí) |
SetBytes() | 設(shè)置處理字節(jié)數(shù) |
ReportAllocs() | 報(bào)告內(nèi)存信息 |
runN(n int) | 運(yùn)行一個(gè)基準(zhǔn)函數(shù) |
go test
里面還有很多的flags表示 例如:-parallel n
-cover
-vet list
-parallel n
…
以上就是Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言單元測(cè)試性能測(cè)試的資料請(qǐng)關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。