欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解

 更新時(shí)間:2021年11月16日 17:13:58   作者:楓少文  
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步

概述

測(cè)試不是Go語(yǔ)言獨(dú)有的,其實(shí)在很多語(yǔ)言都有測(cè)試,例如:Go、Java、Python…

要想成為一名合格的大牛,這是程序員必須具備的一項(xiàng)技能,特別是一些大公司,這是加分的一項(xiàng),主要有如下優(yōu)點(diǎn):

代碼可以隨時(shí)測(cè)試,保證代碼不會(huì)產(chǎn)生錯(cuò)誤

寫(xiě)出更加高效的代碼

單元測(cè)試

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

運(yùn)行結(jié)果如下:

//單元測(cè)試命令行
$ 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
//運(yùn)行指定單元測(cè)試用例
$ 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

代碼說(shuō)明如下

第 1 行,在 go test后跟 add_test.go 件,表示測(cè)試這個(gè)文件里的所有測(cè)試用例。

第 2 行,顯示測(cè)試結(jié)果,ok 測(cè)試通過(guò),command-line-arguments 用例需要用到的一個(gè)包名,0.069s表示測(cè)試花費(fèi)的時(shí)間。

第 3 行,顯示在附加參數(shù)中添加了-v,可以讓測(cè)試時(shí)顯示詳細(xì)的流程。

第 4-7 行,表示開(kāi)始運(yùn)行名叫 TestAdd TestMul 用例。

第 4-7 行,表示已經(jīng)運(yùn)行完 TestAdd TestMul試用例,PASS 表示測(cè)試成功。

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

問(wèn)題

ok command-line-arguments (cached)

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

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

注意

每個(gè)測(cè)試文件必須以 _test.go 結(jié)尾,不然 go test 不能發(fā)現(xiàn)測(cè)試文件

測(cè)試文件寫(xiě)在同一個(gè)包,方便測(cè)試和后期的維護(hù)

每個(gè)測(cè)試文件必須導(dǎo)入 testing

功能測(cè)試函數(shù)必須以 Test 開(kāi)頭,然后一般接測(cè)試函數(shù)的名字

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

方 法 描述
Log 打印日志,同時(shí)結(jié)束測(cè)試
Logf 格式化打印日志,同時(shí)結(jié)束測(cè)試
Error 打印錯(cuò)誤日志,同時(shí)結(jié)束測(cè)試
Errorf 格式化打印錯(cuò)誤日志,同時(shí)結(jié)束測(cè)試
Fatal 打印致命日志,同時(shí)結(jié)束測(cè)試
Fatalf 格式化打印致命日志,同時(shí)結(jié)束測(cè)試

直接打印:Log Error Fatal

格式化打?。?code>Logf Errorf Fatalf

性能測(cè)試

基本使用

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

測(cè)試結(jié)果如下:

$ 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

代碼如下說(shuō)明:

第 1 行 -bench="." 表示運(yùn)行 benchmark_test.go 文件里面全部的測(cè)試,其實(shí)和-run一樣【 -bench regexp 是可以接收一個(gè)正則,如果要運(yùn)行所以的基準(zhǔn)測(cè)試,請(qǐng)使用-bench. or -bench=.'.

第 2 行 goos 表示系統(tǒng)是 windows

第 3 行 goarch 表示 操作系統(tǒng)構(gòu)架是amd64

第 4 行 BenchmarkHello-4 表示 測(cè)試名稱(chēng) , 20000000測(cè)試的次數(shù) , 93.7 ns/op表示表示每一個(gè)操作耗費(fèi)多少時(shí)間(納秒)

自定義測(cè)試時(shí)間

通過(guò)-benchtime參數(shù)可以自定義測(cè)試時(shí)間,例如:

$ 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

當(dāng)你不設(shè)置-benchtime t時(shí),默認(rèn)值是1秒

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

方法 描述
StartTimer() 啟動(dòng)計(jì)時(shí)
StopTimer() 停止計(jì)時(shí)
ResetTimer 重置計(jì)時(shí)
SetBytes() 設(shè)置處理字節(jié)數(shù)
ReportAllocs() 報(bào)告內(nèi)存信息
runN(n int) 運(yùn)行一個(gè)基準(zhǔn)函數(shù)

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

以上就是Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言單元測(cè)試性能測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang校驗(yàn)字符串是否JSON格式的方法總結(jié)

    Golang校驗(yàn)字符串是否JSON格式的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Golang中校驗(yàn)字符串是否JSON格式的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • Go高級(jí)特性探究之處理1分鐘百萬(wàn)請(qǐng)求詳解

    Go高級(jí)特性探究之處理1分鐘百萬(wàn)請(qǐng)求詳解

    對(duì)于大型的互聯(lián)網(wǎng)應(yīng)用程序,如電商平臺(tái)、社交網(wǎng)絡(luò)、金融交易平臺(tái)等,每秒鐘都會(huì)收到大量的請(qǐng)求,那么Go是如何處理這些百萬(wàn)請(qǐng)求的呢,下面就來(lái)和大家詳細(xì)講講
    2023-06-06
  • golang 微服務(wù)之gRPC與Protobuf的使用

    golang 微服務(wù)之gRPC與Protobuf的使用

    這篇文章主要介紹了golang 微服務(wù)之gRPC與Protobuf的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • golang中validator包的使用教程

    golang中validator包的使用教程

    Validator 實(shí)際上是一個(gè)驗(yàn)證工具,屬于 golang 的第三方包,這個(gè)包中使用了各種反射技巧來(lái)提供了各種校驗(yàn)和約束數(shù)據(jù)的方式方法,下面就跟隨小編一起來(lái)學(xué)習(xí)一下validator包的使用吧
    2023-09-09
  • GO語(yǔ)言求100以?xún)?nèi)的素?cái)?shù)

    GO語(yǔ)言求100以?xún)?nèi)的素?cái)?shù)

    這篇文章主要介紹了GO語(yǔ)言求100以?xún)?nèi)的素?cái)?shù),主要通過(guò)篩選法來(lái)實(shí)現(xiàn),涉及GO語(yǔ)言基本的循環(huán)與函數(shù)調(diào)用方法,需要的朋友可以參考下
    2014-12-12
  • 淺談Go語(yǔ)言的error類(lèi)型

    淺談Go語(yǔ)言的error類(lèi)型

    這篇文章主要介紹了淺談Go語(yǔ)言的error類(lèi)型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 深入了解Go語(yǔ)言中database/sql是如何設(shè)計(jì)的

    深入了解Go語(yǔ)言中database/sql是如何設(shè)計(jì)的

    在?Go?語(yǔ)言中內(nèi)置了?database/sql?包,它只對(duì)外暴露了一套統(tǒng)一的編程接口,便可以操作不同數(shù)據(jù)庫(kù),那么database/sql?是如何設(shè)計(jì)的呢,下面就來(lái)和大家簡(jiǎn)單聊聊吧
    2023-07-07
  • zap接收gin框架默認(rèn)的日志并配置日志歸檔示例

    zap接收gin框架默認(rèn)的日志并配置日志歸檔示例

    本文介紹了在基于gin框架開(kāi)發(fā)的項(xiàng)目中如何配置并使用zap來(lái)接收并記錄gin框架默認(rèn)的日志和如何配置日志歸檔。有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-04-04
  • go語(yǔ)言中匿名函數(shù)的作用域陷阱詳解

    go語(yǔ)言中匿名函數(shù)的作用域陷阱詳解

    GO語(yǔ)言的匿名函數(shù)(anonymous?function),其實(shí)就是閉包.是指不需要定義函數(shù)名的一種函數(shù)實(shí)現(xiàn)方式,下面這篇文章主要給大家介紹了關(guān)于go語(yǔ)言中匿名函數(shù)作用域陷阱的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Go?slice切片make生成append追加copy復(fù)制示例

    Go?slice切片make生成append追加copy復(fù)制示例

    這篇文章主要為大家介紹了Go使用make生成切片、使用append追加切片元素、使用copy復(fù)制切片使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論