1. 程式人生 > >go語言中單元測試的加深版本

go語言中單元測試的加深版本

[1] success ola class 測試框架 error clas 為我 port

元測試

總結一些單元測試的相關類容以供以後進行學習與參考

基礎知識:
GO為我們提供了測試框架,go test,讓我們能夠很容易的進行單元測試。
但必須遵守以下幾點規則:

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

若是遵循上述的幾點規則,可以很容易些出一個測試環節

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

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")
        }
    }
}

go語言中單元測試的加深版本