Go語言測試

*_test.go
單元測試函數
{PASS/FAIL	
測試函數的名字必須以Test開頭,可選的後綴名必須以大寫字母開頭
func TestSin(t *testing.T) { /* ... */ }
參數t用來報告測試失敗和附加的日誌信息
go test如果沒有參數指定包 則採用當前目錄對應的包,同go build
錯誤信息一般是:f(x) = y, want z
-v 打印每個測試函數的名字和運行時間
-run=xxx 正則匹配測試函數名
-coverprofile=c.out 測試覆蓋率
-covermode=count 每塊代碼的覆蓋次數
 -run=NONE 禁止單元測試
go test -v -run=xxx xxx包名   -coverprofile=c.out
只顯示覆蓋率摘要
go test -cover

測試報告 綠色被覆蓋,紅色未覆蓋
go tool cover -html=c.out

測試擴展包
xxx_test包

}
基準測試函數
{
Benchmark爲前綴的函數
go test -bench=.  -benchmem

import "testing"
func BenchmarkIsPalindrome(b *testing.B) {
 for i := 0; i < b.N; i++ {
 IsPalindrome("A man, a plan, a canal: Panama")
 } 
}

BenchmarkIsPalindrome-8 1000000 1035 ns/op
ok gopl.io/ch11/word2 2.179s
8表示GOMAXPROCS值
1000000次花了2.179s,每次1.035微妙

}
示例函數
{
Example爲前綴的函數
func ExampleIsPalindrome() {
 fmt.Println(IsPalindrome("A man, a plan, a canal: Panama"))
 fmt.Println(IsPalindrome("palindrome"))
 // Output:
 // true
 // false
}
}

剖析方法 這三個一起使用要小心,會影響程序的運行。
$ go test -cpuprofile=cpu.out
$ go test -blockprofile=block.out
$ go test -memprofile=mem.out
go tool pprof生成對應概要文件的可執行程序和對應的分析日誌文件


panic應該放在main函數中,真有panic,應該用recover捕獲。
如果想在測試代碼包裏面引用未導出的函數,可以在包內編寫_test.go文件導出該函數。

以fmt包爲例:
代表fmt包內的產品代碼的源文件列表
	go list -f={{.GoFiles}} fmt
fmt包內的測試代碼文件
	go list -f={{.TestGoFiles}} fmt
屬於測試代碼包的代碼
	go list -f={{.XTestGoFiles}} fmt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章