前幾天,Leader讓我學習GO單元測試而且組內分享。通過這些天在網上查閱資料和實踐。總結出如下內容。框架
基礎知識:
GO爲咱們提供了測試框架,go test
,讓咱們可以很容易的進行單元測試。
但必須遵照如下幾點規則:函數
最好
是被測方法所在go文件的文件名。(不同也能夠運行go test,可是應該遵照統一的規範)只要遵照以上規則,很容易能夠編寫一個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") } } }
運行結果
可以清楚看到每組測試結果。這種形式可以輕易添加測試用例。