golang 單元測試框架實踐

2022-06-16 16:45:10 字數 2870 閱讀 2723

日常開發中, 測試是不能缺少的,每次手動測試非常費時費力,通過單元測試可以達到一次實現多次利用;

單元測試主要是通過模擬業務中的引數,呼叫我們的函式,然後獲取執行結果,再判斷結果是否符合規則;同時還可以對某乙個方法進行效能分析

在go 標準庫中有乙個叫做testing的測試框架, 可以用於單元測試和效能測試. 它是和命令go test整合使用的,測試檔案是以後綴_test.go命名的, 通常和被測試的檔案放在同乙個包中.

單元測試我們大部分情況下無需增加或修改業務**,只需增加單元測試**即可,在這個實驗過程中,我們簡單編寫乙個簡單的業務**,用來模擬專案中的業務**;然後再新增單元測試**進行測試。

我們找乙個空資料夾,新建乙個main.go檔案,在檔案中將一下**複製進去並儲存

package main

func sum(count int) int

接著我們繼續在當前資料夾下新建單元測試**,按照簡介中的規則,我們需要新建乙個名為main_test.go的檔案,然後在檔案中編寫測試**,示例**如下

package main

import (

"testing"

)//單元測試

func testsum(t *testing.t)

}//效能測試

func benchmarksum(b *testing.b)

}

普通測試主要是驗證返回的結果是否符合預期,執行的命令如下所示

go test -v  main_test.go  main.go
命令執行後,返回的結果如下所示

從上圖中可以看到,單元測試提示測試通過,說明我們程式符合預期

效能測試主要是通過多次呼叫程式,總耗時來分析程式的效能,類似於ab壓力測試,執行命令如下所示

go test -v -bench="benchmarksum$"  --run=none main_test.go  main.go
命令中的-bench="benchmarksum$"引數代表要窒息哪乙個方法,執行結果如下所示

在上圖中可以看到程式被呼叫了1000000000次,平均耗時0.254ns

效能分析主要是檢視方法中具體的瓶頸,比如a方法呼叫了c、b、d多個方法,具體耗時在什麼位置,我們可以在上一條效能測試的命令中加入-cpuprofile cpu.out引數(文章附錄有多種分析指標型別)加入到效能測試中的具體資訊儲存

go test -v -bench="benchmarksum$"  --run=none  -cpuprofile cpu.out  main_test.go  main.go
通過go 自帶工具分析儲存的檔案

go tool pprof cpu.out
命令執行之後返回資訊如下圖所示

通過第三方工具檢視分析

apt install graphviz  && go tool pprof -http=":" cpu.out
命令執行之後,會返回乙個localhost網域名稱加隨機埠的**,開啟**之後,能看到如下資訊,因為我測試的方法比較簡單

各引數含義翻譯

-blockprofile block.out

將goroutine阻塞配置檔案寫入指定檔案

當所有測試完成時。

按照-c的方式編寫測試二進位制檔案。

-blockprofilerate n

控制細節提供的goroutine阻塞配置檔案

呼叫執行時。setblockprofilerate與n。

參見" go doc run . setblockprofilerate "

剖析器的目標是平均每個阻塞事件取樣一次

n納秒的程式花費被阻塞。預設情況下,

如果以及。塊配置檔案沒有設定這個標誌,所有的阻塞事件

,相當於-test.blockprofilerate=1。

-coverprofile cover.out

在所有測試通過後,向檔案寫入覆蓋率配置檔案。

設定覆蓋。

-cpuprofile cpu.out

退出前將cpu配置檔案寫入指定檔案。

按照-c的方式編寫測試二進位制檔案。

-memprofile mem.out

通過所有測試後,將分配配置檔案寫入該檔案。

按照-c的方式編寫測試二進位制檔案。

-memprofilerate n

啟用更精確(和昂貴)的記憶體分配配置檔案

設定runtime.memprofilerate。參見" go doc run . memprofilerate "。

要配置所有記憶體分配,使用-test.memprofilerate=1。

-mutexprofile mutex.out

將互斥鎖爭用配置檔案寫入指定檔案

當所有測試完成時。

按照-c的方式編寫測試二進位制檔案。

-mutexprofilefraction n

樣本1在n堆疊的蹤跡goroutines持有a

爭用互斥鎖。

日期:2020-08-1

golang 單元測試框架

自動化生成測試方法 gotests 1.資料庫 mock 2.go check 框架 3.ginkgo 框架 4.各個框架的主要用途 convey 主要用途是用來組織測試用例的 gomock 主要用來給介面打樁的。mockgen可以生成對應的介面測試檔案。gostub 主要用來給變數 函式 過程打樁...

golang 單元測試

單元測試是質量保證十分重要的一環,好的單元測試不僅能及時地發現問題,更能夠方便地除錯,提高生產效率,所以很多人認為寫單元測試是需要額外的時間,會降低生產效率,是對單元測試最大的偏見和誤解 go 語言原生支援了單元測試,使用上非常簡單,測試 只需要放到以 test.go結尾的檔案中即可。golang的...

Golang測試 單元測試

1 測試檔案必須以 test.go結尾 2 測試函式名必須以test xx開始 x為對應的需要測試的函式 3 使用go test命令開啟測試 檔名以 test結尾,函式以test開頭,在執行 go test 命令時會自動匹配測試檔案很執行測試函式 1 有時候我們將測試檔案 以 test.go 結尾的...