<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
多人共同作業的專案裡,要保證程式碼的質量,自然離不開單元測試。開發完一個功能後肯定要對所寫的程式碼進行測試,測試沒有問題之後再合併到程式碼庫供他人使用。如果強行合併到程式碼庫可能會影響其他人開發,被上線的話肯定也會導致線上 Bug ,影響使用者使用。
所以,單元測試也是一個很重要的事情。單元測試是指在開發中,對一個函數或模組的測試。其強調的是對單元進行測試。
Go 語言提供了單元測試的框架,只要遵循其規則即可:
測試檔案命名:
測試函數命名:
func add(){}
, 其函數名應為 TestAdd
# main.go func Add(){ // to do something } # main_test.go func TestAdd(t *testing.T) { result := Add() if result == 3 { println("success") } else { println("error") } }
根據以上規則,就可以進行對某測試檔案執行命令,進行單元測試:
go test -v ./main_test.go
如果顯示的測試結果有 PASS 標記,說明單元測試通過。
函數是否被全面測試,還需要覆蓋率進行檢測。單元測試命令增加 --coverprofile 標記,就可以得到一個單元測試覆蓋檔案,且會在控制檯列印出程式碼覆蓋率是多少。
go test -v --coverprofile=main.cover ./main_test.go
Go 框架還可以生成 html 檔案的覆蓋率報告,這樣就可以對單元測試覆蓋率的結果更清晰,更明白。
go tool cover -html=main.cover -o=main.html
開啟 html 檔案就可以看到紅色標記是沒有被覆蓋到,綠色是被測試到的。
以上是簡單的功能的單元測試,驗證功能邏輯的正確。但有時候還有效能的要求,這時就可以使用基準測試來評估程式碼的效能。
基準測試是一項用於測試和評估軟體效能指標的方法,主要測試程式碼的效能。基準測試的規則和單元測試的規則是不一樣的:
func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { Add() } }
寫完基準測試,就可以執行命令進行測試:
go test -bench=. ./
使用 go test 命令,再加上 -bench 這個 Flag,它接受一個表示式作為引數,以匹配基準測試的函數,"."表示執行所有基準測試。
BenchmarkAdd-10, 其中的 -10 是執行基準測試時對應的 GOMAXPROCS 的值。基準測試的時間預設是 1 秒,也就是 1 秒呼叫 1000000000 次、每次呼叫花費 311 納秒。如果想讓測試執行的時間更長,可以通過 -benchtime 指定,比如 3 秒。
go test -bench=. -benchtime=3s ./
進行基準測試之前,需要進行一些資料準備,如構建測試資料,而這部分準備工作不屬於效能測試計算範圍內所以需要排除在外。通過使用充值計數器 ResetTimer重新計算。也支援使用 StartTimer 和 StopTimer 方法,控制何時開始計時何時結束。
記憶體統計主要是統計每次操作分配記憶體的次數和分配的位元組數。使用 ReportAllocs() 方法
func BenchmarkAdd(b *testing.B) { b.ResetTimer() // 重置計時時間 b.ReportAllocs() // 記憶體統計 for i := 0; i < b.N; i++ { Add() } }
對以上命令執行後可在控制檯上得到結果。多了兩個指標。
兩個指標沒有統一標準區說明越小越好還是越大越好,主要還是需要根據業務場景來判斷的。
在並行的情況下,Go 也支援基準測試。Go 語言通過 RunParallel 方法執行並行基準測試。建立多個 goroutine 然後將 b.N 分配給這些 goroutine 執行。
func BenchmarkAdd(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { Add() } }) }
單元測試可以保證程式碼質量,但其也不是萬能的,還需要 code Review 和人工測試才能更好的保證程式碼的質量。
參考資料:https://www.jb51.net/article/260482.htm
以上就是Golang 單元測試和基準測試範例詳解的詳細內容,更多關於Golang 單元測試基準測試的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45