開發程式其中很重要的一點是測試,我們如何保證程式碼的品質,如何保證每個函式是可執行,執行結果是正確的,又如何保證寫出來的程式碼效能是好的,我們知道單元測試的重點在於發現程式設計或實現的邏輯錯誤,使問題及早暴露,便於問題的定位解決,而效能測試的重點在於發現程式設計上的一些問題,讓線上的程式能夠在高併發的情況下還能保持穩定。本小節將帶著這一連串的問題來講解 Go 語言中如何來實現單元測試和效能測試。
Go 語言中自帶有一個輕量級的測試框架 testing 和自帶的go test命令來實現單元測試和效能測試,testing框架和其他語言中的測試框架類似,你可以基於這個框架寫針對相應函式的測試案例,也可以基於該框架寫相應的壓力測試案例,那麼接下來讓我們一一來看一下怎麼寫。
packagegotestimport ("testing" )funcTest_Division_1(t *testing.T) {if i, e :=Division(6, 2); i !=3|| e !=nil { //try a unit test on function t.Error("除法函式測試沒透過") // 如果不是如預期的那麼就報錯 } else { t.Log("第一個測試通過了") //記錄一些你期望記錄的資訊 } }funcTest_Division_2(t *testing.T) { t.Error("就是不透過") }
funcTest_Division_2(t *testing.T) {if _, e :=Division(6, 0); e ==nil { //try a unit test on function t.Error("Division did not work as expected.") // 如果不是如預期的那麼就報錯 } else { t.Log("one test passed.", e) //記錄一些你期望記錄的資訊 } }
然後我們執行`go test -v`,就顯示如下資訊,測試通過了:
=== RUN Test_Division_1
--- PASS: Test_Division_1 (0.00 seconds)
gotest_test.go:11: 第一個測試通過了
=== RUN Test_Division_2
--- PASS: Test_Division_2 (0.00 seconds)
gotest_test.go:20: one test passed. 除數不能為 0
PASS
ok gotest 0.013s