中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言單元測試與性能測試示例分析

發布時間:2021-11-17 09:09:44 來源:億速云 閱讀:166 作者:iii 欄目:開發技術

這篇文章主要講解了“Go語言單元測試與性能測試示例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go語言單元測試與性能測試示例分析”吧!

概述

測試不是Go語言獨有的,其實在很多語言都有測試,例如:Go、Java、Python…

要想成為一名合格的大牛,這是程序員必須具備的一項技能,特別是一些大公司,這是加分的一項,主要有如下優點:

代碼可以隨時測試,保證代碼不會產生錯誤

寫出更加高效的代碼

單元測試

格式: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)
	}
}

運行結果如下:

//單元測試命令行
$ 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 行,顯示測試結果,ok 測試通過,command-line-arguments 用例需要用到的一個包名,0.069s表示測試花費的時間。

第 3 行,顯示在附加參數中添加了-v,可以讓測試時顯示詳細的流程。

第 4-7 行,表示開始運行名叫 TestAdd TestMul 用例。

第 4-7 行,表示已經運行完 TestAdd TestMul試用例,PASS 表示測試成功。

第10行,表示運行指定的單元測試用例 主要加上-run 后面跟上你需要測試的函數(TestAdd)

問題

ok command-line-arguments (cached)

第一種:清除緩存 go clean -testcache

第二種:go test設置flags go test add_test.go add.go -count=1

注意

每個測試文件必須以 _test.go 結尾,不然 go test 不能發現測試文件

測試文件寫在同一個包,方便測試和后期的維護

每個測試文件必須導入 testing

功能測試函數必須以 Test 開頭,然后一般接測試函數的名字

testing.T 提供了幾種日志輸出方法

方 法描述
Log打印日志,同時結束測試
Logf格式化打印日志,同時結束測試
Error打印錯誤日志,同時結束測試
Errorf格式化打印錯誤日志,同時結束測試
Fatal打印致命日志,同時結束測試
Fatalf格式化打印致命日志,同時結束測試

直接打印:Log Error Fatal

格式化打印: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")
    	}
    }

測試結果如下:

$ 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 是可以接收一個正則,如果要運行所以的基準測試,請使用-bench. or -bench=.'.

第 2 行 goos 表示系統是 windows

第 3 行 goarch 表示 操作系統構架是amd64

第 4 行 BenchmarkHello-4 表示 測試名稱 , 20000000測試的次數 , 93.7 ns/op表示表示每一個操作耗費多少時間(納秒)

自定義測試時間

通過-benchtime參數可以自定義測試時間,例如:

$ 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

當你不設置-benchtime t時,默認值是1秒

testing.B 提供了幾種方法【testing.B擁有testing.T的全部接口】

方法描述
StartTimer()啟動計時
StopTimer()停止計時
ResetTimer重置計時
SetBytes()設置處理字節數
ReportAllocs()報告內存信息
runN(n int)運行一個基準函數

go test里面還有很多的flags表示 例如:-parallel n -cover -vet list -parallel n

感謝各位的閱讀,以上就是“Go語言單元測試與性能測試示例分析”的內容了,經過本文的學習后,相信大家對Go語言單元測試與性能測試示例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汤阴县| 日照市| 张家港市| 武城县| 灵丘县| 开封县| 池州市| 敦化市| 天水市| 泰宁县| 沐川县| 长武县| 宁河县| 安国市| 奇台县| 牙克石市| 樟树市| 黎川县| 青冈县| 临江市| 辉南县| 敦煌市| 广南县| 长葛市| 朝阳市| 大方县| 嘉兴市| 景宁| 河池市| 阳高县| 泰安市| 财经| 濮阳市| 锦屏县| 合作市| 盐边县| 饶阳县| 长葛市| 蓬莱市| 东阿县| 启东市|