Go語言的測試

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

之前看過一本書,說:“凡大神都是先寫好單元測試用例,才去寫代碼的”。我一直都記在心裡。今天終於有空,就看了看Golang的測試包testing

謝大的書和Golang官方的文檔講的差不多,Golang提供了兩個測試方式:用例測試和壓力測試。

###1. 用例測試

用例測試的規則我是複製謝大的:

  • 檔案名稱必須是_test.go結尾的,這樣在執行go test的時候才會執行到相應的代碼
  • 你必須import testing這個包
  • 所有的測試案例函數必須是Test開頭
  • 測試案例會按照原始碼中寫的順序依次執行
  • 測試函數TestXxx()的參數是testing.T,我們可以使用該類型來記錄錯誤或者是測試狀態
  • 測試格式:func TestXxx (t *testing.T),Xxx部分可以為任意的字母數位組合,但是首字母不能是小寫字母[a-z],例如Testintdiv是錯誤的函數名。
  • 函數中通過調用testing.TError, Errorf, FailNow, Fatal, FatalIf方法,說明測試不通過,調用Log方法用來記錄測試的資訊。

以我之前寫好的堆排序為例進行測試,測試需要以包為單位。對於Golang,就是以檔案夾為單位。需要將堆排序檔案quicksort.go和測試檔案quicksort_test.go放到一起。

驗證堆排序測試案例:

func TestHeapSort(t *testing.T) {test0 := []int{49, 38, 65, 97, 76, 13, 27, 49}test1 := []int{13, 27, 38, 49, 49, 65, 76, 97}heapSort(BySortIndex(test0), 0, len(test0))for i := 0; i < len(test0); i++ {if test0[i] != test1[i] {t.Fatal("error")}}}$ go test -v

###2. 壓力測試

用例測試要用到的是testing.T,而壓力測試需要testing.B。它的原型如下:

type B struct {commonN                intpreviousN        int           // number of iterations in the previous runpreviousDuration time.Duration // total duration of the previous runbenchmark        InternalBenchmarkbytes            int64timerOn          boolshowAllocResult  boolresult           BenchmarkResultparallelism      int // RunParallel creates parallelism*GOMAXPROCS goroutines// The initial states of memStats.Mallocs and memStats.TotalAlloc.startAllocs uint64startBytes  uint64// The net total of this test after being run.netAllocs uint64netBytes  uint64}

此結構裡面有一個屬性N,它表示的是進行壓力測試的次數。可以通過b.N = 1234來設定壓力次數。

func BenchmarkHeapSort(b *testing.B) {b.StopTimer()  //調用該函數停止壓力測試的時間計數b.StartTimer() //重新開始時間b.N = 1234for i := 0; i < b.N; i++ {test0 := []int{49, 38, 65, 97, 76, 13, 27, 49}test1 := []int{13, 27, 38, 49, 49, 65, 76, 97}heapSort(BySortIndex(test0), 0, len(test0))for i := 0; i < len(test0); i++ {if test0[i] != test1[i] {b.Fatal("error")}}}}$ go test -v -test.bench=".*"=== RUN TestHeapSort--- PASS: TestHeapSort (0.00 seconds)PASSBenchmarkHeapSort           1234              1620 ns/opok      go_code/test    0.051s

這裡我只是拋磚引玉,簡單寫了一點。今後寫代碼,我也得像大神一下寫用例了。大家共勉,哈哈哈。

本文所涉及到的完整源碼請參考。

######參考文獻+ 【1】Go怎麼寫測試案例 - astaxie

原文連結:Go語言的測試,轉載請註明來源!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.