編寫單元測試用例
- 檔案名稱必須以'_test.go'結尾
- 必須import "testing"這個包
- 測試案例會按照原始碼中寫的順序依次執行
- 測試函數'TestXxx(t *testing.T)'中的參數是‘testing.T’,我們可以用該類型來記錄錯誤或者是測試狀態
- 測試格式:‘func TestXxx(t *testing.T)’,'Xxx'部分可以為任意的字母數字組合,但是首字母不能是小寫字母[a-z]
- 函數中通過調用'testing.T'的'Error'、'Errorf'、'FailNow'、'Fatal'、‘FatalIf’方法,說明測試案例不通過,調用''Log'方法用來記錄測試的資訊
編寫壓力測試
- 壓力測試用例必須遵循如下格式,其中XXX可以是任意字母數位組合,但是首字母不能是小寫字母
func BenchmarkXXX(b *testing.a) {...}
- go test 不會預設執行壓力測試的函數,如果要執行壓力測試需要帶上參數。-test.bench,文法: -test.bench="test_name_regex" ,例如 go test -test.bench=".*"表示測試全部的壓力測試函數
- 在壓力測試用例中,需要才迴圈體內使用testing.B.N,以使測試案例正常運行
- 檔案名稱也必須以_test.go結尾
單元測試用例
源碼
package gotest import( ) func Add(a, b float64) float64 { return a + b }
測試案例
package gotestimport ( "testing")func Test_Add_1(t *testing.T) { if i := Add(6,2); i != 8 { t.Error("fail") } else { t.Log("pass") }}func Test_Add_2(t *testing.T) { if i := Add(6,2); i == 8 { t.Log("pass") } else { t.Error("fail") }}
運行測試案例
go test -v
測試案例執行結果
=== RUN Test_Add_1--- PASS: Test_Add_1 (0.00s) gotest_test.go:11: pass=== RUN Test_Add_2--- PASS: Test_Add_2 (0.00s) gotest_test.go:17: passPASSok github.com/shadowsocks/shadowsocks-go/sample-config/gotest 0.001s
壓力測試用例
源碼
package gotestimport( "testing")func Benchmark_Add(b *testing.B) { for i := 0; i < b.N ; i++ { Add(3,4) }}func Benchmark_TimeConsumingFunction(b *testing.B) { b.StopTimer() //調用該函數停止壓力測試的時間計數 //做一些初始化工作,這些時間不影響我們測試函數本身的效能 b.StartTimer() for i := 0; i < b.N; i++ { Add(5,6) }}
運行結果
Benchmark_Add-4 2000000000 0.38 ns/opBenchmark_TimeConsumingFunction-4 2000000000 0.38 ns/opPASSok github.com/shadowsocks/shadowsocks-go/sample-config/gotest 1.594s第一條顯示Benchmark_add-4執行了20億次,每次執行時間為0.38納秒第二條也一樣