go testing
阿新 • • 發佈:2019-01-22
如何保證程式碼的質量和可靠性?Golang自帶了testing包可用來實現測試用例和效能測試.
如下為例,新建gotest專案目錄,編寫兩個檔案bubblesort.go和bubblesort_test.go
bubblesort.go
- package gotest
- //from small to big
- func BubbleSort(num []int){
- flag :=false
- for i :=0; i < len(num)-1; i++{
- flag =false
- for j :=0; j < len(num)-1-i; j++{
- if num[j]> num[j+1]{
- num
- flag =true
- }
- }
- if!flag {
- break
- }
- }
- return
- }
bubblesort_test.go
- package gotest
- import(
- "testing"
- )
- func TestBubbleSort(t *testing.T){
- values :=[]int{5,4,3,2,1}
- BubbleSort(values)
- if values[0]!=1|| values[1]!=2|| values[2]!=3|| values[3]!=4||
- values[4]!=5{
- t.Error("BubbleSort() failed. Got"
- }
- }
- func BenchmarkBubbleSort(b *testing.B){
- for i :=0; i < b.N; i++{
- values :=[]int{5,4,3,2,1}
- BubbleSort(values)
- }
- }
golang測試用例使用原則:
- 檔名必須是_test.go結尾的,這樣在執行go test的時候才會執行到相應的程式碼
- 你必須import testing這個包
- 所有的測試用例函式必須是Test開頭
- 測試用例會按照原始碼中寫的順序依次執行
- 測試函式TestXxx()的引數是testing.T,我們可以使用該型別來記錄錯誤或者是測試狀態
- 測試格式:func TestXxx (t *testing.T),Xxx部分可以為任意的字母數字的組合,但是首字母不能是小寫字母[a-z],例如Testintdiv是錯誤的函式名。
- 函式中通過呼叫testing.T的Error, Errorf, FailNow, Fatal, FatalIf方法,說明測試不通過,呼叫Log方法用來記錄測試的資訊。
golang壓力測試使用原則:
- 壓力測試用例必須遵循如下格式,其中XXX可以是任意字母數字的組合,但是首字母不能是小寫字母
- go test不會預設執行壓力測試的函式,如果要執行壓力測試需要帶上引數-test.bench,語法:-test.bench="test_name_regex",例如go test -test.bench=".*"表示測試全部的壓力測試函式
- 在壓力測試用例中,請記得在迴圈體內使用testing.B.N,以使測試可以正常的執行
- 檔名也必須以_test.go結尾
如何執行測試用例?在專案目錄下執行:go test
- PASS
- ok test/gotest 0.002s
顯示詳細測試通過和log資訊:go test -v
- === RUN TestBubbleSort
- --- PASS:TestBubbleSort(0.00s)
- PASS
- ok test/gotest 0.002s
檢視測試覆蓋率:go test -cover
- $ go test -cover
- PASS
- coverage:90.0% of statements
- ok test/gotest 0.001s
如果執行壓力測試?執行: go test -test.bench=".*"
- $ go test -test.bench=".*"
- PASS
- BenchmarkBubbleSort-43000000045.8 ns/op
- ok test/gotest 1.424s
還可以利用go tool pprof工具生產效能報告.