今天就跟大家聊聊有關(guān)利用golang怎么實(shí)現(xiàn)單元測試,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為云岡企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè),云岡網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
單元測試
單元測試的格式形如:
func TestAbs(t *testing.T) { got := Abs(-1) if got != 1 { t.Errorf("Abs(-1) = %d; want 1", got) } }
在 util 目錄下創(chuàng)建一個(gè)文件 util_test.go, 添加一個(gè)單元測試:
package util import "testing" // 普通的測試 func TestGenShortID(t *testing.T) { shortID, err := GenShortID() if shortID == "" || err != nil { t.Error("GenShortID failed") } }
然后, 在根目錄下運(yùn)行 go test -v ./util/, 測試結(jié)果如下:
root@592402321ce7:/workspace# go test -v ./util/ === RUN TestGenShortID --- PASS: TestGenShortID (0.00s) PASS ok tzh.com/web/util 0.006s
性能測試
性能測試的結(jié)果形如:
func BenchmarkHello(b *testing.B) { for i := 0; i < b.N; i++ { fmt.Sprintf("hello") } }
在 util_test.go 添加性能測試:
// 性能測試 func BenchmarkGenShortID(b *testing.B) { for i := 0; i < b.N; i++ { GenShortID() } }
運(yùn)行結(jié)果如下(使用 --run=none 避免運(yùn)行普通的測試函數(shù), 因?yàn)橐话悴豢赡苡泻瘮?shù)名匹配 none):
root@592402321ce7:/workspace# go test -v -bench="BenchmarkGenShortID$" --run=none ./util/ goos: linux goarch: amd64 pkg: tzh.com/web/util BenchmarkGenShortID-2 507237 2352 ns/op PASS ok tzh.com/web/util 1.229s
這說明, 平均每次運(yùn)行 GenShortID() 需要 2352 納秒.
性能分析
運(yùn)行測試的時(shí)候, 可以指定一些參數(shù), 生成性能文件 profile.
-blockprofile block.out Write a goroutine blocking profile to the specified file when all tests are complete. Writes test binary as -c would. -blockprofilerate n Control the detail provided in goroutine blocking profiles by calling runtime.SetBlockProfileRate with n. See 'go doc runtime.SetBlockProfileRate'. The profiler aims to sample, on average, one blocking event every n nanoseconds the program spends blocked. By default, if -test.blockprofile is set without this flag, all blocking events are recorded, equivalent to -test.blockprofilerate=1. -coverprofile cover.out Write a coverage profile to the file after all tests have passed. Sets -cover. -cpuprofile cpu.out Write a CPU profile to the specified file before exiting. Writes test binary as -c would. -memprofile mem.out Write an allocation profile to the file after all tests have passed. Writes test binary as -c would. -memprofilerate n Enable more precise (and expensive) memory allocation profiles by setting runtime.MemProfileRate. See 'go doc runtime.MemProfileRate'. To profile all memory allocations, use -test.memprofilerate=1. -mutexprofile mutex.out Write a mutex contention profile to the specified file when all tests are complete. Writes test binary as -c would. -mutexprofilefraction n Sample 1 in n stack traces of goroutines holding a contended mutex.
使用下面的命令, 生成 CPU 的 profile:
go test -v -bench="BenchmarkGenShortID$" --run=none -cpuprofile cpu.out ./util/
當(dāng)前目錄下, 應(yīng)該會生成 cpu.out 文件和 util.test 文件.
使用下面的命令, 觀察耗時(shí)操作:
# 進(jìn)入交互模式 go tool pprof cpu.out top
安裝 Graphviz 后可以生成可視化的分析圖.
apt install graphviz go tool pprof -http=":" cpu.out
測試覆蓋率
root@592402321ce7:/workspace# go test -v -coverprofile=cover.out ./util/ === RUN TestGenShortID --- PASS: TestGenShortID (0.00s) PASS coverage: 9.1% of statements ok tzh.com/web/util 0.005s coverage: 9.1% of statements root@592402321ce7:/workspace# go tool cover -func=cover.out tzh.com/web/util/util.go:12: GenShortID 100.0% tzh.com/web/util/util.go:17: GetReqID 0.0% tzh.com/web/util/util.go:22: TimeToStr 0.0% tzh.com/web/util/util.go:30: GetTag 0.0% total: (statements) 9.1%
使用 -coverprofile=cover.out 選項(xiàng)可以統(tǒng)計(jì)測試覆蓋率.使用 go tool cover -func=cover.out 可以查看更加詳細(xì)的測試覆蓋率結(jié)果,
統(tǒng)計(jì)每個(gè)函數(shù)的測試覆蓋率.
看完上述內(nèi)容,你們對利用golang怎么實(shí)現(xiàn)單元測試有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
本文名稱:利用golang怎么實(shí)現(xiàn)單元測試
本文鏈接:http://www.rwnh.cn/article6/jdchig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、建站公司、軟件開發(fā)、外貿(mào)建站、定制開發(fā)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)