1. 程式人生 > >go testing

go testing

如何保證程式碼的質量和可靠性?Golang自帶了testing包可用來實現測試用例和效能測試.
如下為例,新建gotest專案目錄,編寫兩個檔案bubblesort.go和bubblesort_test.go
bubblesort.go

  1. package gotest
  2. //from small to big
  3. func BubbleSort(num []int){
  4. flag :=false
  5. for i :=0; i < len(num)-1; i++{
  6. flag =false
  7. for j :=0; j < len(num)-1-i; j++{
  8. if num[j]> num[j+1]{
  9. num
    [j], num[j+1]= num[j+1], num[j]
  10. flag =true
  11. }
  12. }
  13. if!flag {
  14. break
  15. }
  16. }
  17. return
  18. }

bubblesort_test.go
  1. package gotest
  2. import(
  3. "testing"
  4. )
  5. func TestBubbleSort(t *testing.T){
  6. values :=[]int{5,4,3,2,1}
  7. BubbleSort(values)
  8. if values[0]!=1|| values[1]!=2|| values[2]!=3|| values[3]!=4||
  9. values[4]!=5{
  10. t.Error("BubbleSort() failed. Got"
    , values,"Expected 1 2 3 4 5")
  11. }
  12. }
  13. func BenchmarkBubbleSort(b *testing.B){
  14. for i :=0; i < b.N; i++{
  15. values :=[]int{5,4,3,2,1}
  16. BubbleSort(values)
  17. }
  18. }

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

  1. PASS
  2. ok test/gotest 0.002s

顯示詳細測試通過和log資訊:go test -v

  1. === RUN TestBubbleSort
  2. --- PASS:TestBubbleSort(0.00s)
  3. PASS
  4. ok test/gotest 0.002s

檢視測試覆蓋率:go test -cover

  1. $ go test -cover
  2. PASS
  3. coverage:90.0% of statements
  4. ok test/gotest 0.001s

如果執行壓力測試?執行: go test -test.bench=".*"

  1. $ go test -test.bench=".*"
  2. PASS
  3. BenchmarkBubbleSort-43000000045.8 ns/op
  4. ok test/gotest 1.424s

還可以利用go tool pprof工具生產效能報告.