golang使用go test輸出單元測試覆蓋率的方式
一、背景
單元測試覆蓋率是衡量代碼質量的一個重要指標,重要的代碼文件覆蓋率應該至少達到80%以上。Java 可以通過JaCoCo 統(tǒng)計覆蓋率,那么go 項目如何進行代碼覆蓋率測試呢?
二、統(tǒng)計方式
1、生成覆蓋率報告(go test 指令)
我們知道直接執(zhí)行測試代碼的指令: go test 指定文件名稱 -run “測試方法”。
項目工程是如下架構的,可以通過這種方式生成覆蓋率報告:

go test -mod=vendor -covermode=count -coverprofile=coverprofile.cov -run="^Test" -coverpkg=$(go list -mod=vendor ./... | grep -v "/test" | tr '\n' ',') ./... 或 非 vendor 模式: go test -covermode=count -coverprofile=coverprofile.cov -run="^Test" -coverpkg=$(go list ./... | grep -v "/test" | tr '\n' ',') ./...
生成結果:coverprofile.cov
指令簡單說明:
mod=vendor: 加載依賴的方式:從本地vendor 目錄加載。適用于服務器不能從外網(wǎng)下載依賴的情況
covermode: count: 統(tǒng)計代碼訪問次數(shù);set: 統(tǒng)計代碼是否被訪問; atomic: 一般在并發(fā)工程中使用(?)
run: 正則方式指定需要運行的測試方法
coverpkg: 指定業(yè)務代碼路徑,多個用逗號隔開,詳細說明在后面
./…:遍歷當前目錄下測試文件,包括子目錄
關于為什么要使用coverpkg:
主要是因為我們的項目結構中,測試代碼和業(yè)務代碼是分開的,而不是放到同一個目錄中。因此如果只指定測試方法,就無法識別到業(yè)務代碼,來計算覆蓋率了。
因此我們既需要指定測試代碼路徑(當然這里聲明為 ./… 就可以了,只有_test 結尾的方法會自動作為測試方法),也需要指定業(yè)務代碼路徑(通過grep -v 和 tr 指令,最終將業(yè)務代碼輸出成 git/controller,git/database 的格式)
2、打開覆蓋率報告
通過html 文件打開(推薦,能看到方法細節(jié)):
go tool cover -html=coverprofile.cov
在命令行直接查看:
go tool cover -func=coverprofile.cov
三、展望
當然我們可能會遇到一些特殊情況:比如不希望將init 方法也列入統(tǒng)計等等,這些后續(xù)再補充。
到此這篇關于golang使用go test輸出單元測試覆蓋率的方式的文章就介紹到這了,更多相關go test單元測試覆蓋率內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Go并發(fā)原語之SingleFlight請求合并方法實例
本文我們來學習一下 Go 語言的擴展并發(fā)原語:SingleFlight,SingleFlight 的作用是將并發(fā)請求合并成一個請求,以減少重復的進程來優(yōu)化 Go 代碼2023-12-12

