go test 注釋后必須多空出一行,也就是 // 下一行要預留為空行,否則go解析的時候會把下一行解析成注釋
1. 條件build 舉例
a.go
// +build !test ...todo code
b.go
//+build test ...todo code
上面兩個go文件,在執行 go build -tags "test" 的時候,實際上是只執行 b.go
+build 是值得條件變異,test指的是 -tags 后的內容 符號 ! 是 “非” 的意思
2. go test 最大操作方位:包 包
//在packageName目錄下,包與包用空格間隔 go test -tags "test" funnel/tasks net/http
上述代碼中,funnel/task 和 net/http 分別是兩個包
3. go test 最小操作范圍: func
go test -run=TestFunctionName //測試當前包下面的TestFunctionName函數
上述內容中,TestFunctionName 是函數名,函數測試必須遵循下面幾點
- 測試文件需要與被測試文件保持同級目錄(這也是go test中所有測試用例的規范):demo.go demo_test.go
- 文件命名規則:被測試文件的文件名_test.go
- 測試函數明明:Test+測試場景的函數名(t *testing.T)
- 一個test.go文件內,可以包含多個測試場景
- 一個包中的抽象出的公共測試函數,以包名_test.go命名文件
4. go test 常用命令列表
- -v 無論用力是否測試通過,都會顯示結果,不加 "-v" 表示只顯示未通過的用例
- -run 測試某個函數比如 go test -run = TestFunctionName
- -cover 輸出測試代碼覆蓋率
- -c 變異pkg.test 但不執行
- -i 安裝測試依賴的package包,但不運行
- -o 制定用於測試的課執行文件的名稱
- t.Log, t.Logf 打印正常信息
- t.Error,t.Errorf 打印錯誤信息