GO隨筆-單元測試-基礎測試

單元測試

前幾天,Leader讓我學習GO單元測試而且組內分享。通過這些天在網上查閱資料和實踐。總結出如下內容。框架


基礎知識:
GO爲咱們提供了測試框架,go test,讓咱們可以很容易的進行單元測試。
但必須遵照如下幾點規則:函數

  • 測試文件必須以_test.go結尾
  • 單元測試文件名_test.go前面的部分最好是被測方法所在go文件的文件名。(不同也能夠運行go test,可是應該遵照統一的規範)
  • 單元測試的函數必須以Test開頭,是公開函數
  • 測試函數必須接收一個指向testing.T類型的指針(依測試目的而定,如主要是測試性能,則用testing.B等),而且不能返回任何值。
  • 函數名最好是Test+測試函數名(依測試類型而定,Benchmark等)。

只要遵照以上規則,很容易能夠編寫一個GO單元測試。性能

在網上查閱資料時,看到有一篇文章寫道:
圖片描述單元測試

測試代碼的文件放置的位置能夠隨意?
頓時感受GO真的好智能,火燒眉毛的嘗試了一下:
圖片描述學習

難道須要指定路徑?
圖片描述測試

多是我沒有理解這句話的含義,但我我的感受,仍是放在一個目錄(包)下吧。
package也能夠隨意寫?
嘗試後結論,不能。spa

寫一個簡單的單元測試用例
add.go3d

package add

func Add(a, b int) int{
    return a+b
}

add_test.go指針

package add

import "testing"

func TestAdd(t *testing.T){
    if sum:=Add(1,2); sum!=3{
        t.Error("fail")//日誌通常要寫成f(x)=y, want z的形式
    } else {
        t.Log("success")
    }
}

go test -v便可看到測試結果
圖片描述日誌

(這裏有一點我踩過的小坑,當想指定測試文件的時候go test file_test.go會報錯,由於須要後面還須要接上被測試的文件:go test file_test.go file.go

只是一個最簡單的基本測試。另外一種測試方法叫作:表組測試。其實就是多個基本測試。
將上面test簡單改造

package add

import "testing"

func TestAdd(t *testing.T){
    var tests = []struct{
        date []int
        want int
    }{
        {[]int{1, 2}, 3},
        {[]int{2, 5}, 7},
        {[]int{3, 9}, 11},
    }

    for _,v := range tests{
        if sum:=Add(v.date[0], v.date[1]); sum!=v.want{
            t.Errorf("Add(%d, %d) = %d, want %d", v.date[0], v.date[1], v.date[0]+v.date[1], v.want)
        } else {
            t.Log("success")
        }
    }
}

運行結果
圖片描述可以清楚看到每組測試結果。這種形式可以輕易添加測試用例。

相關文章
相關標籤/搜索