Go語言基礎(chǔ)單元測試與性能測試示例詳解
概述
測試不是Go語言獨有的,其實在很多語言都有測試,例如:Go、Java、Python…
要想成為一名合格的大牛,這是程序員必須具備的一項技能,特別是一些大公司,這是加分的一項,主要有如下優(yōu)點:
代碼可以隨時測試,保證代碼不會產(chǎn)生錯誤
寫出更加高效的代碼
單元測試
格式:func TestXXX(t *testing.T)
//add.go
package cal
func Add(num1, num2 int) int {
return num1 + num2
}
//mul.go
package cal
func Mul(num1, num2 int) int {
return num1 * num2
}
//add_test.go
package cal
import (
"testing"
)
func TestAdd(t *testing.T) {
sum := Add(10, 20)
if sum != 30 {
t.Log("10+20=", sum)
}
}
func TestMul(t *testing.T) {
sum := Mul(10, 2)
if sum != 20 {
t.Error("10 * 2 =", sum)
}
}
運行結(jié)果如下:
//單元測試命令行 $ go test add_test.go add.go mul.go ok command-line-arguments 0.072s $ go test -v add_test.go add.go === RUN TestAdd --- PASS: TestAdd (0.00s) === RUN TestMul --- PASS: TestMul (0.00s) PASS ok command-line-arguments 0.070s //運行指定單元測試用例 $ go test -v -run TestAdd add_test.go add.go mul.go === RUN TestAdd --- PASS: TestAdd (0.00s) PASS ok command-line-arguments 0.072s
代碼說明如下
第 1 行,在 go test后跟 add_test.go 件,表示測試這個文件里的所有測試用例。
第 2 行,顯示測試結(jié)果,ok 測試通過,command-line-arguments 用例需要用到的一個包名,0.069s表示測試花費的時間。
第 3 行,顯示在附加參數(shù)中添加了-v,可以讓測試時顯示詳細(xì)的流程。
第 4-7 行,表示開始運行名叫 TestAdd TestMul 用例。
第 4-7 行,表示已經(jīng)運行完 TestAdd TestMul試用例,PASS 表示測試成功。
第10行,表示運行指定的單元測試用例 主要加上-run 后面跟上你需要測試的函數(shù)(TestAdd)
問題
ok command-line-arguments (cached)
第一種:清除緩存 go clean -testcache
第二種:go test設(shè)置flags go test add_test.go add.go -count=1
注意
每個測試文件必須以 _test.go 結(jié)尾,不然 go test 不能發(fā)現(xiàn)測試文件
測試文件寫在同一個包,方便測試和后期的維護(hù)
每個測試文件必須導(dǎo)入 testing 包
功能測試函數(shù)必須以 Test 開頭,然后一般接測試函數(shù)的名字
testing.T 提供了幾種日志輸出方法
| 方 法 | 描述 |
|---|---|
| Log | 打印日志,同時結(jié)束測試 |
| Logf | 格式化打印日志,同時結(jié)束測試 |
| Error | 打印錯誤日志,同時結(jié)束測試 |
| Errorf | 格式化打印錯誤日志,同時結(jié)束測試 |
| Fatal | 打印致命日志,同時結(jié)束測試 |
| Fatalf | 格式化打印致命日志,同時結(jié)束測試 |
直接打?。?code>Log Error Fatal
格式化打?。?code>Logf Errorf Fatalf
性能測試
基本使用
格式:func BenchmarkXxx(*testing.B)
//benchmark_test.go
package cal
import (
"fmt"
"testing"
)
func BenchmarkHello(b *testing.B) {
for i := 0; i < b.N; i++ {
fmt.Sprintf("hello")
}
}
測試結(jié)果如下:
$ go test -v -bench="." benchmark_test.go goos: windows goarch: amd64 BenchmarkHello-4 20000000 93.7 ns/op PASS ok command-line-arguments 2.061s
代碼如下說明:
第 1 行 -bench="." 表示運行 benchmark_test.go 文件里面全部的測試,其實和-run一樣【 -bench regexp 是可以接收一個正則,如果要運行所以的基準(zhǔn)測試,請使用-bench. or -bench=.'.】
第 2 行 goos 表示系統(tǒng)是 windows
第 3 行 goarch 表示 操作系統(tǒng)構(gòu)架是amd64
第 4 行 BenchmarkHello-4 表示 測試名稱 , 20000000測試的次數(shù) , 93.7 ns/op表示表示每一個操作耗費多少時間(納秒)
自定義測試時間
通過-benchtime參數(shù)可以自定義測試時間,例如:
$ go test -v -benchtime=2s -bench=. benchmark_test.go goos: windows goarch: amd64 BenchmarkHello-4 30000000 85.1 ns/op PASS ok command-line-arguments 2.714s
當(dāng)你不設(shè)置-benchtime t時,默認(rèn)值是1秒
testing.B 提供了幾種方法【testing.B擁有testing.T的全部接口】
| 方法 | 描述 |
|---|---|
| StartTimer() | 啟動計時 |
| StopTimer() | 停止計時 |
| ResetTimer | 重置計時 |
| SetBytes() | 設(shè)置處理字節(jié)數(shù) |
| ReportAllocs() | 報告內(nèi)存信息 |
| runN(n int) | 運行一個基準(zhǔn)函數(shù) |
go test里面還有很多的flags表示 例如:-parallel n -cover -vet list -parallel n …
以上就是Go語言基礎(chǔ)單元測試與性能測試示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語言單元測試性能測試的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang 微服務(wù)之gRPC與Protobuf的使用
這篇文章主要介紹了golang 微服務(wù)之gRPC與Protobuf的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
深入了解Go語言中database/sql是如何設(shè)計的
在?Go?語言中內(nèi)置了?database/sql?包,它只對外暴露了一套統(tǒng)一的編程接口,便可以操作不同數(shù)據(jù)庫,那么database/sql?是如何設(shè)計的呢,下面就來和大家簡單聊聊吧2023-07-07
Go?slice切片make生成append追加copy復(fù)制示例
這篇文章主要為大家介紹了Go使用make生成切片、使用append追加切片元素、使用copy復(fù)制切片使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

