測試是自動化測試的簡稱,即編寫簡單的程式來確保程式(產品**)在測試中針對特定輸入產生預期的輸出。go的測試方法看上去相對比較低階,它依賴於命令go test和一些能用go test執行的測試函式的編寫約定
go test 子命令是go語言包的測試驅動程式,這些包根據某些約定組織在一起。在乙個包目錄中,以_test.go結尾的檔案不是go build命令編譯的目標,而是go test編譯的目標。
在*_test.go檔案中,三種函式需要特殊對待,即
功能測試函式
基準測試函式 :名稱以benchmark開頭,用來檢測某些操作的效能。
示例執行測試函式 :以example來測試某些操作的效能。用來提供機器檢查過的文件。
每乙個測試檔案必須匯入testing包,簽名如下
import "testing"func testname(t *testing.t)
功能測試函式必須以test開頭,可選的字尾名稱必須以大寫字母開頭:
import "testing"func testsin(t *testing.t)
func testcos(t *testing.t)
如下編譯乙個測試連線mysql的單元測試,必須保證同目錄的情況下,否則找不到,建立乙個mysql.go用來編寫連線的**
在同目錄下建立乙個mysql_test.go用來編寫測試**
package mysqlimport (
"testing"
)func test_findbypk(t *testing.t)
執行乙個測試套件覆蓋待測試包的比例稱為測試的覆蓋率。覆蓋率無法直接通過數量來衡量。任何事情都是動態的。即使最微小的程式都無法精準的測量。語句覆蓋率是指部分語句在一次執行中至少執行一次。go語言中提供cover工具
# go test -coverpass
coverage: 100.0% of statements
ok jdgobackend/library/sdk/jd 0.017s
go還提供了將輸出列印報告的方法。
# go test -cover -coverprofile=c.out
然後可以通過html方法顯示,使用cover
工具來處理生成的記錄資訊,該命令會開啟本地的瀏覽器視窗生成乙個html報告。
# go tool cover -html=c.out
基準測試是在一定的工作負載之下檢測程式效能的一種方法,在go裡面,基準測試函式看上去像乙個測試函式。但字首是benchmark並且擁有乙個*testing.b引數用來提供大多數和*testing.t相同的方法。額外增加一些與效能檢測相關的方法。還提供了乙個整數檢測成員n,用來檢測執行的次數。
基本格式
func benchmarkname(b *testing.b)
下面的基準測試在乙個迴圈中呼叫了ispaling共 n次
import "testing"func benchmarkispaling(b *testing.b)
}
和測試不同的是,預設情況下不會執行任何基準測試,需要標記-bench的引數指定要執行的基準引數。
# go test -bench=ispalingbenchmarkispaling-8 10000000 203 ns/op
pass
ok jdgobackend/library/sdk/jd 2.255s
就上面的執行結果,基礎名稱benchmarkispaling-8字尾8表示gomaxprocs的值。這個數字對併發基準測試很重要。
報告告訴我們每次ispaling呼叫耗費0.23ms。這個是1 000 000 0次呼叫的平均值
我們可以通過-benchmen再報告中包含了記憶體分配統計資料。這裡和優化之前的記憶體分配進行比較。
# go test -bench=. -benchmen // . 萬用字元匹配所有pass
benchmarkispaling 1000000 1026 ns/op 304 b/op 4 allocs/op
最後,效能比較函式知識普通的**,它們的表現形式通常是帶有乙個引數的函式,被多個不同benchmark函式傳入不同的值來呼叫。如下
func benchmark(b *testing.b, size int)func benchmark10(b *testing.b)
func benchmark100(b *testing.b)
func benchmark1000(b *testing.b)
引數size指定了輸入的大小,每個benchmark函式傳入的值都不同但是在每個函式內部是乙個常量,不要使用b.n作為輸入的大小。除非把它當作固定大小輸入的迴圈次數。否則該基準測試的結果毫無意義。
最後測試牽扯到效能,將會在效能模組詳細介紹。
golang 單元測試
單元測試是質量保證十分重要的一環,好的單元測試不僅能及時地發現問題,更能夠方便地除錯,提高生產效率,所以很多人認為寫單元測試是需要額外的時間,會降低生產效率,是對單元測試最大的偏見和誤解 go 語言原生支援了單元測試,使用上非常簡單,測試 只需要放到以 test.go結尾的檔案中即可。golang的...
golang單元測試之mock
搞單元測試,如果碰到這些情況 1,乙個函式,內部包含了很多並且很深的呼叫,但是如果單單測這個函式,其實實現的功能很簡單。2,乙個函式,包含了其他還未實現的呼叫。3,函式內部對資料的要求極為苛刻。那麼這時候就可以考慮使用mock來處理。mock,簡而言之就是可以通過注入我們所期望返回的資料,或者我們所...
Golang測試 單元測試
1 測試檔案必須以 test.go結尾 2 測試函式名必須以test xx開始 x為對應的需要測試的函式 3 使用go test命令開啟測試 檔名以 test結尾,函式以test開頭,在執行 go test 命令時會自動匹配測試檔案很執行測試函式 1 有時候我們將測試檔案 以 test.go 結尾的...