国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Golang 語言怎么編寫測試代碼?

開發(fā) 后端
我們使用 Golang 語言開發(fā)的項目,怎么保證邏輯正確和性能要求呢?也就是說我們?nèi)绾螠y試我們的 Golang 代碼呢?在 Golang 語言中,可以使用標準庫 testing 包編寫單元測試和基準測試,使用 go test 命令執(zhí)行單元測試和基準測試的代碼。

[[427939]]

01介紹

我們使用 Golang 語言開發(fā)的項目,怎么保證邏輯正確和性能要求呢?也就是說我們?nèi)绾螠y試我們的 Golang 代碼呢?在 Golang 語言中,可以使用標準庫 testing 包編寫單元測試和基準測試,使用 go test 命令執(zhí)行單元測試和基準測試的代碼。本文我們介紹在 Golang 語言中怎么編寫測試代碼。

02命名規(guī)范

在 Golang 語言中編寫測試代碼,需要遵循一些命名規(guī)范,包含文件名、包名、函數(shù)(方法)名和變量名。

文件名和包名

測試文件名以 _test.go 結尾,go test 工具可以遍歷以 _test.go 結尾的文件,執(zhí)行測試函數(shù)。而 go build 和 go run 會忽略以 _test.go 結尾的文件,文件名開頭一般是被測試函數(shù)所在的文件名。

包名一般和被測試文件的包名相同,這樣即可以測試被測試文件的可導出函數(shù)和不可導出函數(shù)。

函數(shù)名和方法名

測試函數(shù)(方法)名必須以 Test、Benchmark 和 Example 開頭,并且必須是可導出函數(shù)。函數(shù)名一般是被測試函數(shù)名,首字母大寫。如果我們需要給同一個函數(shù)編寫多個測試函數(shù),可以在函數(shù)名后接上測試函數(shù)的場景,例如:TestXxxxXxxx。

變量名

測試函數(shù)(方法)的變量名,Golang 語言和 go test 工具沒有明確的約束,但是,社區(qū)針對輸出結果有一些規(guī)范供大家參考。在編寫單元測試代碼時,一般會得到一個實際輸出結果,和一個我們預期的輸出結果做對比。針對這兩個變量,社區(qū)的變量名規(guī)范是 got/want 或 expected/actual。

03編寫測試代碼

單元測試

所謂單元測試,顧名思義就是對單元進行測試,一般進行測試的單元是一個最小的單元,在 Golang 語言中,最小的單元就是指一個函數(shù)或方法。

單元測試的函數(shù),函數(shù)名以 Test 開頭,例如:TestXxx。參數(shù)必須是 *testing.T 類型,可以使用該類型的方法記錄測試信息和測試狀態(tài)。例如,一般使用 Log 和 Logf 記錄測試信息,使用 Error、Errorf、Fatal 和 Fatalf 方法記錄測試狀態(tài),該類型的更多方法可以閱讀官方文檔。

被測試函數(shù):

  1. func Sum(a, b intint { 
  2.  return a+b 

測試函數(shù):

  1. func TestSum(t *testing.T) { 
  2.  a, b := 1,2 
  3.  rst := Sum(a, b) 
  4.  if rst == 3 { 
  5.   t.Logf("expected=%d, actual=%d", 3, rst) 
  6.  } else { 
  7.   // t.Errorf("expected=%d, actual=%d", 3, rst) 
  8.   t.Fatalf("expected=%d, actual=%d", 3, rst) 
  9.  } 
  10.  t.Log("done"

閱讀上面這段代碼,是我們編寫的 Sum 函數(shù)的單元測試,給定 a, b 兩個變量作為 Sum 函數(shù)的輸入?yún)?shù),此外,我們還可以使用表格測試發(fā),給定一組被測試函數(shù)的輸入?yún)?shù),限于篇幅,本文不準備花費篇幅介紹。

使用 go test 命令執(zhí)行以上單元測試的代碼:

  1. go test 
  2. PASS 
  3. ok      learn_go/lesson27       0.555s 

go test 命令遍歷所有 _test.go 結尾的文件,執(zhí)行文件中所有的測試函數(shù)。此外,go test 支持一些參數(shù),例如,-v 輸出測試函數(shù)的運行詳情;-run 指定執(zhí)行的測試函數(shù);-count 指定執(zhí)行次數(shù)。

此外,使用參數(shù) --coverprofile 統(tǒng)計單元測試的覆蓋率。

  1. go test --coverprofile=func.cover 
  2. PASS 
  3. coverage: 100.0% of statements 
  4. ok      learn_go/lesson27       0.499s 

閱讀上面的執(zhí)行結果,可以發(fā)現(xiàn)我們編寫的單元測試覆蓋率為 100%。

如果我們想要查看詳細的覆蓋率統(tǒng)計結果,我們可以執(zhí)行以下命令生成 html 文件,使用瀏覽器打開生成的 html 文件,可以查看詳細的單元測試覆蓋率統(tǒng)計結果。

  1. go tool cover -html=func.cover -o func_cover.html 

運行以上命令,會生成一個名為 func_cover.html 的文件,我們可以使用瀏覽器打開它,查看詳細的單元測試覆蓋率統(tǒng)計結果。

基準測試

在 Golang 語言中,可以使用基準測試查看代碼的性能。基準測試的函數(shù)名以 Benchmark 開頭,例如:BenchmarkXxx。參數(shù)必須是 *testing.B 類型,函數(shù)體中 for 循環(huán)的條件,以 b.N 作為循環(huán)次數(shù),它是基準測試框架提供的,它在 Golang 運行時動態(tài)調(diào)整,通過多次測試,得到性能評估結果。

示例代碼:

  1. func BenchmarkSum(b *testing.B) { 
  2.  for i := 0; i < b.N; i++ { 
  3.   Sum(1, 2) 
  4.  } 

我們可以使用 go test 工具執(zhí)行以上基準測試的代碼,基準測試函數(shù)不會自動執(zhí)行,必須使用參數(shù) -bench。

  1. go test -bench=".*" 
  2. goos: darwin 
  3. goarch: amd64 
  4. pkg: learn_go/lesson27 
  5. cpu: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz 
  6. BenchmarkSum-16         1000000000               0.2325 ns/op 
  7. PASS 
  8. ok      learn_go/lesson27       0.748s 

閱讀上面的執(zhí)行結果,我們主要介紹一下 BenchmarkXxx-n 這一行的意思。這一行共有三列,第一列 BenchmarkSum-16 分別代表基準測試的函數(shù)名和參與基準測試的 CPU 線程數(shù),默認是 GOMAXPROCS 的值。第二列 1000000000 表示基準測試循環(huán)執(zhí)行的次數(shù)。第三列 0.2325 ns/op 表示每次循環(huán)的平均執(zhí)行耗時是 0.2325 納秒,該值越小,說明代碼性能越高。

除了 b.N 之外,還有幾個關于性能測試時間計數(shù)的方法,例如:b.ResetTimer()、b.StopTimer() 和 b.StartTimer(),我們可以根據(jù)我們的測試場景,靈活使用。

此外,go test 工具關于基準測試的參數(shù),除了參數(shù) -bench 之外,還有 -benchmem 統(tǒng)計內(nèi)存分配;-cpu 指定參與執(zhí)行基準測試的 CPU 線程數(shù);-benchtime 指定測試時間和循環(huán)次數(shù),其中值的單位為 s 表示指定執(zhí)行多少秒,單位為 x 表示指定循環(huán)執(zhí)行次數(shù);-timeout 指定基準測試函數(shù)執(zhí)行的超時時間。

04總結

本文我們介紹怎么編寫測試代碼,包含單元測試和基準測試。特別需要注意的是一些命名規(guī)范。

養(yǎng)成編寫測試代碼的習慣,不僅可以降低代碼邏輯的錯誤率,而且在多人開發(fā)中,還可以提升聯(lián)調(diào)效率和提測通過率。

本文轉(zhuǎn)載自微信公眾號「Golang語言開發(fā)棧」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系Golang語言開發(fā)棧公眾號。

 

責任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關推薦

2021-09-26 10:20:06

開發(fā)Golang代碼

2021-09-13 05:02:49

GogRPC語言

2021-06-09 23:36:46

Golang語言版本

2016-11-30 18:35:03

JavaScript

2021-06-29 23:40:19

Golang語言并發(fā)

2021-12-13 01:24:14

語言Golang panic

2023-09-11 11:05:49

軟件開發(fā)TDD

2021-06-07 23:19:44

Golang語言 Defer

2021-11-08 23:09:07

Go排序數(shù)據(jù)

2021-10-26 09:26:21

編程技能開發(fā)

2021-10-31 23:01:50

語言拼接字符串

2019-07-29 09:19:26

編程語言PythonJava

2021-07-12 05:05:59

Golang語言字段

2021-01-29 08:56:13

Golang標準庫函數(shù)

2022-01-04 23:13:57

語言PanicGolang

2023-12-18 10:01:40

Golang代碼開發(fā)

2023-12-19 22:40:23

Golang編程函數(shù)

2021-05-28 08:58:41

Golang網(wǎng)卡metrics

2022-01-09 23:04:19

語言打印結構體

2023-07-31 09:13:13

ValidatorGolang
點贊
收藏

51CTO技術棧公眾號

日本一区二区三区播放| 成人在线看片| 国产日韩欧美日韩大片| 在线成人动漫| 国产乱国产乱300精品| 日韩在线免费视频观看| 91精品国产91久久久久青草| 91成人在线精品视频| 99久久一区三区四区免费| 国产美女一区视频| 日韩欧美不卡一区| 99久久久国产精品免费调教网站| 中文在线日韩| 大荫蒂性生交片| 91欧美一区二区| 1024在线视频| 日本一区二区视频在线观看| 国产91成人在在线播放| 99热在线播放| 韩国av电影免费观看| 国产黄色在线播放| 中文字幕区一区二区三| 国产精品99久久精品| 精品国产成人系列| 一级毛片免费看| 日韩理论在线观看| 激情亚洲色图| 自拍偷自拍亚洲精品播放| 欧美大片va欧美在线播放| 成人黄色动漫| 欧美撒尿777hd撒尿| 粗大的内捧猛烈进出在线视频| 国产精品女上位| chinese偷拍一区二区三区| 制服视频三区第一页精品| 亚洲狠狠婷婷综合久久久| 国产第一页视频| 五月开心六月丁香综合色啪 | 91在线观看一区二区| 日韩欧美激情在线| 欧美xxxx视频| 日韩理论片久久| japansex久久高清精品| 2019亚洲男人天堂| 香蕉国产精品| 色一情一乱一伦一区二区三欧美| 免费高清在线一区| 国产1区2区在线| 日韩漫画puputoon| 欧美成人乱码一区二区三区| 亚洲视频sss| 18video性欧美19sex高清| 国产成人精品一区二区免费看京| 舔着乳尖日韩一区| 水蜜桃色314在线观看| 97视频热人人精品免费| 在线欧美日韩精品| 亚洲丝袜精品| 色多多国产成人永久免费网站 | 99久久婷婷国产综合精品电影 | 亚洲国产精品久久| 成人黄色免费网站| 国产精品精品视频一区二区三区| 自拍偷拍欧美| 26uuu成人| 亚洲人一二三区| www在线免费观看视频| 最新69国产成人精品视频免费| 国产伦精品一区二区三区免费优势| 成人有码在线视频| 国产成人综合视频| 在线观看免费国产小视频| 亚洲变态欧美另类捆绑| 日本一区二区三区电影免费观看 | 亚洲午夜免费| av在线不卡观看| 国产成人免费xxxxxxxx| 绯色av一区二区| 亚洲天堂男人天堂女人天堂| 女同一区二区三区| 亚洲国产欧美不卡在线观看| 中文字幕一区视频| 亚洲色图美国十次| 国产精品久久久久久影视| 精品写真视频在线观看| 传媒av在线| 中文字幕在线观看日韩| 欧美成人首页| 少妇性l交大片| 3d动漫精品啪啪1区2区免费 | 欧美性色欧美a在线播放| 丁香婷婷久久| 免费av在线一区二区| 国产精品久久午夜夜伦鲁鲁| 国产色婷婷在线| 国产精品一区二区久久国产| 国产99一区视频免费| 天堂中文а√在线| 国产91精品久久久久| 国内久久精品视频| 91社区在线观看播放| 日本亚洲欧美三级| 97久久人人超碰| tube8在线hd| 亚洲综合在线播放| 国产精品乱人伦中文| 亚洲伦乱视频| 欧美人与物videos另类| 亚洲va韩国va欧美va| 精品一区二区三区中文字幕| 神马影院午夜我不卡影院| 精品久久久久人成| 国内精品国产成人国产三级粉色| 在线观看污视频| 91久久精品一区二区三| 亚洲精品国模| 三级a在线观看| 夜夜嗨av一区二区三区四区| 中文精品在线| 国产理论电影在线观看| 国产精品狼人色视频一区| 国产精品久线在线观看| 网站一区二区| 成熟了的熟妇毛茸茸| 亚洲欧美一区二区三区在线| 免费成人在线观看视频| 青青草视频在线免费直播| 精品蜜桃传媒| 欧美日韩激情一区二区| 最新欧美人z0oozo0| 日产精品久久久久久久性色| 国产精品久久色| 亚洲国产日日夜夜| 成人在线免费视频观看| 一本大道香蕉久久| 国产91免费看片| 亚洲精品视频免费观看| 青青草这里只有精品| 999www人成免费视频| 91精品国产高清自在线看超| 国产女人18毛片水真多成人如厕| 99精品女人在线观看免费视频| 青娱乐自拍偷拍| 久久久97精品| 欧美激情一区二区三区全黄| 97品白浆高清久久久久久| 中文字幕第36页| 日韩av色在线| 欧美视频一二三| 国产欧美日韩一区二区三区在线| av片在线观看永久免费| 最新欧美日韩亚洲| 夜夜嗨av色一区二区不卡| 99re6这里只有精品视频在线观看| 久久伊人精品| 成r视频免费观看在线播放| 亚洲字幕一区二区| 91精品国产日韩91久久久久久| 久久精品72免费观看| 美女久久久久久| 成人黄18免费网站| 91久久久久久久久久久久久| 欧美日韩视频在线一区二区| 国产日韩欧美一区二区三区在线观看 | 成人手机在线播放| 伊人久久久久久久久久久| 久久综合成人精品亚洲另类欧美 | 精品视频一区在线| 日韩精品电影网| 久久中文字幕电影| 欧美**字幕| jyzzz在线观看视频| 在线丝袜欧美日韩制服| 久久综合久中文字幕青草| 亚洲黄色小视频| 亚洲欧美视频| 一区二区三区日本视频| 丝袜国产免费观看| 久久久一本精品99久久精品| 一本色道久久综合狠狠躁篇怎么玩 | 国产午夜精品久久久| 91理论电影在线观看| 精品国产一区二区三区噜噜噜 | 日本美女高清在线观看免费| 欧美一区二区视频在线播放| 国产成人精品免高潮费视频| 欧美一三区三区四区免费在线看| 成人激情av网| 天天射成人网| www.久久| 国产精品麻豆一区二区三区| 日本午夜激情视频| 亚洲影视九九影院在线观看| 综合欧美国产视频二区| 疯狂欧美牲乱大交777| 激情五月播播久久久精品| 伊人久久大香线蕉综合网蜜芽 | 在线视频91| 国产欧美日韩视频| 正在播放欧美视频|