go語言中單元測試的加深版本
阿新 • • 發佈:2019-05-14
[1] success ola class 測試框架 error clas 為我 port 元測試
(這裏有一點我踩過的小坑,當想指定測試文件的時候go test file_test.go會報錯,因為需要後面還需要接上被測試的文件:go test file_test.go file.go)
總結一些單元測試的相關類容以供以後進行學習與參考
基礎知識:
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語言中單元測試的加深版本