Go語言基礎單元測試與性能測試示例詳解
概述
測試不是Go語言獨有的,其實在很多語言都有測試,例如:Go、Java、Python…
要想成為一名合格的大牛,這是程序員必須具備的一項技能,特別是一些大公司,這是加分的一項,主要有如下優點:
代碼可以隨時測試,保證代碼不會產生錯誤
寫出更加高效的代碼
testing文檔
Testing_flags文檔
單元測試
格式: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) } }
運行結果如下:
//單元測試命令行 $ go test add_test.go add.go mul.go ok command-line-arguments 0.072s $ go test -v add_test.go add.go === RUN TestAdd --- PASS: TestAdd (0.00s) === RUN TestMul --- PASS: TestMul (0.00s) PASS ok command-line-arguments 0.070s //運行指定單元測試用例 $ go test -v -run TestAdd add_test.go add.go mul.go === RUN TestAdd --- PASS: TestAdd (0.00s) PASS ok command-line-arguments 0.072s
代碼說明如下
第 1 行,在 go test
後跟 add_test.go
件,表示測試這個文件裡的所有測試用例。
第 2 行,顯示測試結果,ok
測試通過,command-line-arguments
用例需要用到的一個包名,0.069s
表示測試花費的時間。
第 3 行,顯示在附加參數中添加瞭-v
,可以讓測試時顯示詳細的流程。
第 4-7 行,表示開始運行名叫 TestAdd
TestMul
用例。
第 4-7 行,表示已經運行完 TestAdd
TestMul
試用例,PASS 表示測試成功。
第10行,表示運行指定的單元測試用例 主要加上-run
後面跟上你需要測試的函數(TestAdd
)
問題
ok command-line-arguments (cached)
第一種:清除緩存 go clean -testcache
第二種:go test設置flags go test add_test.go add.go -count=1
註意
每個測試文件必須以 _test.go
結尾,不然 go test
不能發現測試文件
測試文件寫在同一個包,方便測試和後期的維護
每個測試文件必須導入 testing
包
功能測試函數必須以 Test
開頭,然後一般接測試函數的名字
testing.T
提供瞭幾種日志輸出方法
方 法 | 描述 |
---|---|
Log | 打印日志,同時結束測試 |
Logf | 格式化打印日志,同時結束測試 |
Error | 打印錯誤日志,同時結束測試 |
Errorf | 格式化打印錯誤日志,同時結束測試 |
Fatal | 打印致命日志,同時結束測試 |
Fatalf | 格式化打印致命日志,同時結束測試 |
直接打印:Log
Error
Fatal
格式化打印:Logf
Errorf
Fatalf
性能測試
基本使用
格式: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") } }
測試結果如下:
$ go test -v -bench="." benchmark_test.go goos: windows goarch: amd64 BenchmarkHello-4 20000000 93.7 ns/op PASS ok command-line-arguments 2.061s
代碼如下說明:
第 1 行 -bench="."
表示運行 benchmark_test.go
文件裡面全部的測試,其實和-run
一樣【 -bench regexp
是可以接收一個正則,如果要運行所以的基準測試,請使用-bench.
or -bench=.'.
】
第 2 行 goos
表示系統是 windows
第 3 行 goarch
表示 操作系統構架是amd64
第 4 行 BenchmarkHello-4
表示 測試名稱 , 20000000
測試的次數 , 93.7 ns/op
表示表示每一個操作耗費多少時間(納秒)
自定義測試時間
通過-benchtime
參數可以自定義測試時間,例如:
$ go test -v -benchtime=2s -bench=. benchmark_test.go goos: windows goarch: amd64 BenchmarkHello-4 30000000 85.1 ns/op PASS ok command-line-arguments 2.714s
當你不設置-benchtime t
時,默認值是1秒
testing.B
提供瞭幾種方法【testing.B
擁有testing.T
的全部接口】
方法 | 描述 |
---|---|
StartTimer() | 啟動計時 |
StopTimer() | 停止計時 |
ResetTimer | 重置計時 |
SetBytes() | 設置處理字節數 |
ReportAllocs() | 報告內存信息 |
runN(n int) | 運行一個基準函數 |
go test
裡面還有很多的flags表示 例如:-parallel n
-cover
-vet list
-parallel n
…
以上就是Go語言基礎單元測試與性能測試示例詳解的詳細內容,更多關於Go語言單元測試性能測試的資料請關註WalkonNet其它相關文章!