golang的單元測試
Go語言中自帶有一個輕量級的測試框架testing和自帶的 go test命令來實現單元測試和性能測試,testing框架和其他語言中的測試框架類似,你可以基於這個框架寫針對相應函數的測試用例
編寫測試用例
測試編寫原則
- 文件名必須是
_test.go
結尾的,這樣在執行go test
的時候纔會執行到相應的代碼 - 你必須import
testing
這個包 - 所有的測試用例函數必須是
Test
開頭 - 測試用例會按照源代碼中寫的順序依次執行
- 測試函數
TestXxx()
的參數是testing.T
,我們可以使用該類型來記錄錯誤或者是測試狀態 - 測試格式:
func TestXxx (t *testing.T)
,Xxx
部分可以爲任意的字母數字的組合,但是首字母不能是小寫字母[a-z],例如Testintdiv
是錯誤的函數名。 - 函數中通過調用
testing.T
的Error
,Errorf
,FailNow
,Fatal
,FatalIf
方法,說明測試不通過,調用Log
方法用來記錄測試的信息。
舉個栗子
package main import ( "testing" ) func Test_add(t *testing.T) { if i:= add(6, 2); i != 8 { //try a unit test on function t.Error("除法函數測試沒通過") // 如果不是如預期的那麼就報錯 } else { t.Log("第一個測試通過了") //記錄一些你期望記錄的信息 } }
常用命令
go test
go test -v
如何編寫壓力測試
壓力測試用來檢測函數(方法)的性能,和編寫單元功能測試的方法類似,此處不再贅述,但需要注意以下幾點:
- 壓力測試用例必須遵循如下格式,其中XXX可以是任意字母數字的組合,但是首字母不能是小寫字母 func BenchmarkXXX(b *testing.B) { ... }
go test
不會默認執行壓力測試的函數,如果要執行壓力測試需要帶上參數-test.bench
,語法:-test.bench="test_name_regex"
,例如go test -test.bench=".*"
表示測試全部的壓力測試函數- 在壓力測試用例中,請記得在循環體內使用
testing.B.N
,以使測試可以正常的運行 - 文件名也必須以
_test.go
結尾