Golang中內置了對單元測試的支持,不需要像Java一樣引入第三方Jar才能進行測試,下麵將分別介紹Golang所支持的幾種測試; 一、測試類型 Golang中單元測試有功能測試、基準測試、示例測試或稱示例函數三種; 功能測試必須以TestXXX函數名出現,基準測試必須以BenchmarkXXX函 ...
Golang中內置了對單元測試的支持,不需要像Java一樣引入第三方Jar才能進行測試,下麵將分別介紹Golang所支持的幾種測試;
一、測試類型
Golang中單元測試有功能測試、基準測試、示例測試或稱示例函數三種;
功能測試必須以TestXXX函數名出現,基準測試必須以BenchmarkXXX函數名出現,示例函數必須以ExampleXXX函數名出現。
//功能測試
func TestXXX(t *testing.T){
}
//基準測試
func BenchmarkXXX(b * testing.B){
}
//示例函數
func ExampleXXX(){
}
二、功能測試
函數名:TestXxx,以Test為首碼的功能測試函數
參數類型:*testing.T
功能函數:
func(a, b int) Mul {
return b * b
}
測試函數:
func TestMul(t *testing.T) {
arr := [...]int{2, 4, 6}
expected := []int{8, 12}
for j := 0; j < 2; j++ {
result := Add(arr[j], arr[j+1])
if result != expected[j] {
//失敗後停止後序邏輯
t.Fatalf("input is %d, the expected is %d, the actual %d", arr[j], expected[j], result)
//失敗後繼續執行後序邏輯
//t.Errorf("input is %d, the expected is %d, the actual %d", arr[j], expected[j], result)
}
}
}
二、基準測試
用於對程式功能進行可定量、可對比的性能測試;
函數名:BenchmarkXxx,以Test為首碼的測試功能函數
參數類型:*testing.B
func BenchmarkMul(b *testing.B) {
for i := 0; i < b.N; i++ {
Mul(i, i)
}
}
執行結果:
goos: windows
goarch: amd64
pkg: solinx.co/LCache/test
BenchmarkMul-12 1000000000 0.323 ns/op
PASS
coverage: 100.0% of statements
ok solinx.co/LCache/test 0.499s
結果分析:
執行執行環境:windows
架構:amd64
包路徑
BenchmarkMul-12:總共12個邏輯cpu
函數執行時間 0.499秒
測試代碼覆蓋率:100%
三、示例測試
func ExampleMul() {
a := Mul(2, 2)
fmt.Println(a)
//Output: 41
}
輸出內容到標準輸出,參數沒有限制;go test執行時會監測實際輸出與註釋中的期望結果是否一致,一致時測試通過,不一致則測試失敗;
通過:
失敗:
=== RUN ExampleMul
--- FAIL: ExampleMul (0.00s)
got:
4
want:
41
FAIL
coverage: 100.0% of statements
得到了:4,需要的是:41 測試失敗;
四、go test 參數介紹
-count: 設置執行測試函數的次數, 預設 1
-run: 執行功能測試函數, 可正則匹配
-bench: 執行基準測試函數, 可正則匹配
-benchtime: 基準測試最大探索時間
-parallel: 設置功能測試函數最大併發執行數
-v: 是展示測試過程信息
-cover:顯示測試代碼覆蓋率
-list : 列出所匹配的測試函數,不執行
執行與Test匹配的測試函數
go test -run Test
文章首發地址:Solinx
https://mp.weixin.qq.com/s/nqnXiOT_CfD6qWeE6xsrhw