精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

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

[[427939]]

01介紹

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

02命名規(guī)范

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

文件名和包名

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

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

函數(shù)名和方法名

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

變量名

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

03編寫測試代碼

單元測試

所謂單元測試,顧名思義就是對單元進(jìn)行測試,一般進(jìn)行測試的單元是一個(gè)最小的單元,在 Golang 語言中,最小的單元就是指一個(gè)函數(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 兩個(gè)變量作為 Sum 函數(shù)的輸入?yún)?shù),此外,我們還可以使用表格測試發(fā),給定一組被測試函數(shù)的輸入?yún)?shù),限于篇幅,本文不準(zhǔn)備花費(fèi)篇幅介紹。

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

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

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

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

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

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

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

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

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

基準(zhǔn)測試

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

示例代碼:

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

我們可以使用 go test 工具執(zhí)行以上基準(zhǔn)測試的代碼,基準(zhǔn)測試函數(shù)不會自動(dòng)執(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í)行結(jié)果,我們主要介紹一下 BenchmarkXxx-n 這一行的意思。這一行共有三列,第一列 BenchmarkSum-16 分別代表基準(zhǔn)測試的函數(shù)名和參與基準(zhǔn)測試的 CPU 線程數(shù),默認(rèn)是 GOMAXPROCS 的值。第二列 1000000000 表示基準(zhǔn)測試循環(huán)執(zhí)行的次數(shù)。第三列 0.2325 ns/op 表示每次循環(huán)的平均執(zhí)行耗時(shí)是 0.2325 納秒,該值越小,說明代碼性能越高。

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

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

04總結(jié)

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

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

本文轉(zhuǎn)載自微信公眾號「Golang語言開發(fā)?!梗梢酝ㄟ^以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Golang語言開發(fā)棧公眾號。

 

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

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-11-08 23:09:07

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

2021-06-07 23:19:44

Golang語言 Defer

2021-10-26 09:26:21

編程技能開發(fā)

2021-10-31 23:01:50

語言拼接字符串

2019-07-29 09:19:26

編程語言PythonJava

2022-01-04 23:13:57

語言PanicGolang

2021-07-12 05:05:59

Golang語言字段

2021-01-29 08:56:13

Golang標(biāo)準(zhǔn)庫函數(shù)

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

語言打印結(jié)構(gòu)體

2023-07-31 09:13:13

ValidatorGolang
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

久久99热99| 清纯唯美亚洲综合一区| 香蕉av福利精品导航| 久久国产精品-国产精品| 在线观看日本网站| 中文精品电影| 亚洲美女精品久久| 亚洲制服在线观看| 中文字幕这里只有精品| 国产精品第四页| 国产精品久久久久久久免费大片| 特级毛片www| 欧美福利在线| 亚洲午夜久久久影院| 老司机av网站| 欧美大陆国产| 狠狠躁夜夜躁人人爽天天天天97| 特级黄色录像片| 久草在线青青草| 国产高清在线观看免费不卡| 国产精品成人免费视频| 日韩 欧美 亚洲| 小小影院久久| 在线观看国产精品日韩av| 国产二级一片内射视频播放| 一区在线不卡| 欧美无人高清视频在线观看| 9久久9毛片又大又硬又粗| gogo在线高清视频| 欧美一区二区福利视频| 亚洲资源在线看| 中文字幕手机在线视频| 亚洲大胆在线| 欧美日韩成人网| 小早川怜子一区二区的演员表| 中文字幕中文字幕精品| 亚洲风情亚aⅴ在线发布| 日本成人xxx| 婷婷成人av| 欧美影院一区二区三区| 午夜肉伦伦影院| 国产福利电影在线播放| 一区二区三区国产精品| 看一级黄色录像| 欧美尤物美女在线| 欧美激情综合五月色丁香| 欧美激情专区| 日本一区视频| 久久这里只精品最新地址| 国产综合色一区二区三区| 成人久久久精品国产乱码一区二区| 精品一区二区三区日韩| 91啪国产在线| av资源免费看| 国产激情视频一区二区三区欧美 | a资源在线观看| 精品美女久久| 视频直播国产精品| 少妇的滋味中文字幕bd| 国产精品久久久久一区二区三区厕所| 日韩在线免费视频| 欧美肥妇bbwbbw| 亚洲五月综合| 欧美激情视频三区| 黄色激情视频在线观看| 亚洲欧美成人综合| 国产精品jvid在线观看蜜臀| 中文字幕乱码视频| 精品亚洲porn| 国产传媒一区| 视频在线观看你懂的| 国产日韩精品一区二区三区| 天堂社区 天堂综合网 天堂资源最新版 | 国产啊啊啊视频在线观看| 亚洲国产日韩a在线播放性色| 国产欧美日韩网站| 欧美性理论片在线观看片免费| 色av一区二区| 国产一级免费大片| 精品素人av| 亚洲性猛交xxxxwww| 美女福利视频网| 国产一区二区三区四区老人| 97福利一区二区| 中文区中文字幕免费看| 国产精品99久久久久久似苏梦涵| 国产精品久久久久久久久久久久午夜片 | 96日本xxxxxⅹxxx17| 成人午夜免费av| 四虎影院一区二区三区 | 亚洲黄色片在线观看| 欧美视频在线播放一区| 青青久久精品| 亚洲第一视频网| 国产又黄又粗视频| 伊人久久亚洲热| 国产精品美女在线| 性猛交富婆╳xxx乱大交天津| 91丝袜国产在线播放| 精品久久免费观看| 国产精品伦理| 欧美大片顶级少妇| 成人无码av片在线观看| 亚洲无毛电影| 91精品国产91久久久久久| 国产又粗又猛视频免费| 91亚洲精品一区二区乱码| 一区二区高清视频| 成人国产二区| 精品区一区二区| 一本一本久久a久久| 国产日韩欧美高清免费| 91久久伊人青青碰碰婷婷| 理论在线观看| 亚洲成人av一区二区三区| jizzzz日本| 啪啪亚洲精品| 97视频免费看| 精品久久人妻av中文字幕| 中文字幕久久午夜不卡| 欧美v在线观看| 18国产精品| 美女福利视频一区| 一级特黄色大片| 国产亚洲综合av| 黄色免费视频大全| 91精品国产乱码久久久竹菊| 久久精品中文字幕一区| 五月激情丁香网| 国产视频在线观看一区二区三区 | 亚洲第一会所| 亚洲国产私拍精品国模在线观看| 日韩黄色免费观看| 精品在线免费视频| 一区二区精品在线观看| 日本肉肉一区| 亚洲天堂免费观看| 探花视频在线观看| 26uuu色噜噜精品一区| 青青青国产在线观看| 伊色综合久久之综合久久| 免费不卡欧美自拍视频| 国产成人精品无码高潮| 亚洲视频香蕉人妖| 国产在线观看中文字幕| 亚洲不卡av不卡一区二区| 国产伊人精品在线| 视频一区二区三区不卡| 在线成人免费视频| 青花影视在线观看免费高清| 国内精品免费**视频| 91xxx视频| 色播一区二区| 欧美黑人国产人伦爽爽爽| 国产www免费观看| 悠悠色在线精品| 免费黄色av网址| 亚洲大片av| 欧美日韩国产综合视频在线| 日本高清不卡一区二区三区视频 | 久久久久无码精品国产sm果冻 | 国产玉足榨精视频在线观看| 日本久久一区二区| 97精品在线播放| 国产成人自拍高清视频在线免费播放 | 日本视频在线观看一区二区三区| 色婷婷综合久久久久中文一区二区 | 超碰福利在线观看| 香蕉久久一区二区不卡无毒影院 | 五月婷婷六月丁香综合| 日韩欧美成人免费视频| 中国特黄一级片| 国产乱子伦视频一区二区三区| www.国产亚洲| 美女视频免费精品| 国产精品第100页| 国产黄色在线网站| 亚洲国产91色在线| 中文字幕免费高清网站| 亚洲欧美日韩在线播放| 国产精品第七页| 美腿丝袜亚洲三区| 国产xxxx振车| 国产真实有声精品录音| 亚洲最大激情中文字幕| 桃色av一区二区| 日韩在线观看网址| 手机看片福利永久| 欧美日韩一区视频| 免费看日韩毛片| 成人欧美一区二区三区黑人麻豆| 国产国语老龄妇女a片| 日韩在线观看一区二区| www国产免费| 国产传媒欧美日韩成人精品大片| 91嫩草在线| 欧美色片在线观看| 久久久久亚洲精品国产| 99免在线观看免费视频高清| 日韩欧美国产麻豆| 老熟妇一区二区三区啪啪| 亚洲午夜影视影院在线观看| 成年人在线免费看片| 成人h动漫精品一区二| 奇米影音第四色| 午夜在线视频一区二区区别| 国产免费内射又粗又爽密桃视频| av一区二区在线播放| 国产传媒一区二区三区| 久久精品资源| 国产成人免费av| 成人免费图片免费观看| 美女国内精品自产拍在线播放| 二区三区在线播放| 亚洲精品久久久久久久久久久久 | 制服.丝袜.亚洲.中文.综合懂色| 亚洲天堂精品在线观看| 成年人在线免费看片| 99视频有精品| 亚洲啪av永久无码精品放毛片| 精品亚洲国产成人av制服丝袜| 日韩免费高清在线| 国产精品美女久久久浪潮软件| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 精品少妇一区二区三区免费观| 高清久久久久久| 日韩欧美中文在线视频| 久久成人av少妇免费| 国产精品无码一本二本三本色| 99精品热6080yy久久| 男女日批视频在线观看| 欧美另类专区| 青青在线视频免费观看| 欧美在线免费| 国产成人三级视频| 久久精品一区二区不卡| 在线不卡视频一区二区| 午夜免费一区| 先锋影音男人资源| 欧美黄在线观看| 国产一二三四五| 国产精品v亚洲精品v日韩精品 | 久久精品动漫| 国产男女无遮挡| 午夜一区二区三区不卡视频| 日本wwww视频| 丝瓜av网站精品一区二区| 欧美成人精品欧美一级乱| 先锋影音国产一区| 国产xxxxx视频| 免费在线观看成人| 成人综合久久网| 国产一区二区在线电影| 红桃视频一区二区三区免费| 国产99久久久久| 中文字幕在线播放视频| 久久女同互慰一区二区三区| 日韩中文字幕电影| 中文字幕第一区第二区| 午夜爱爱毛片xxxx视频免费看| 亚洲精品国久久99热| 国产无遮挡aaa片爽爽| 精品国产1区2区| 精品久久久久久久久久久久久久久久久久| 色综合久久中文综合久久97| 波多野结衣午夜| 欧美一区二区网站| 日本免费一区视频| 伊人伊成久久人综合网小说| 拍真实国产伦偷精品| 欧美激情18p| 在线观看网站免费入口在线观看国内 | japansex久久高清精品| 国产成人精品日本亚洲11 | 国产一区二区三区直播精品电影| 99re在线视频| 欧美激情综合色| 伊人久久av| 亚洲一区二区在线播放| 欧美黑人做爰爽爽爽| 五月天亚洲综合小说网| 中文字幕免费一区二区三区| 成人免费播放器| 男男视频亚洲欧美| 麻豆av免费看| 国产丝袜欧美中文另类| 免费三片在线播放| 欧日韩精品视频| 蜜桃久久一区二区三区| 伊人久久五月天| sm久久捆绑调教精品一区| 国产日韩欧美视频| 欧美亚洲国产日韩| 午夜啪啪福利视频| 欧美中文日韩| 国产精品一级无码| 中文字幕乱码久久午夜不卡| 奇米影视第四色777| 777奇米四色成人影色区| 亚洲av毛片成人精品| 久久69精品久久久久久国产越南| 欧美香蕉视频| 国产乱码精品一区二区三区不卡| 日韩欧美视频在线播放| 亚欧无线一线二线三线区别| 国产一区二区在线观看免费| 真实乱视频国产免费观看| 亚洲国产精品精华液网站| 艳妇乳肉豪妇荡乳av| 亚洲精品永久免费| missav|免费高清av在线看| 成人情趣片在线观看免费| 国产精品午夜一区二区三区| 青青草成人免费在线视频| 国产一区二区视频在线| 久久久久亚洲av无码a片| 欧美日韩国产精品| 亚洲精品一区二区三区四区| 久久久国产精品免费| 蜜桃视频成人m3u8| 欧美久久在线| 亚洲综合欧美| 小毛片在线观看| 亚洲午夜一二三区视频| 国产剧情久久久| 日韩三级成人av网| a成人v在线| 天堂精品视频| 日本在线不卡视频| 高清国产在线观看| 在线视频你懂得一区| 免费在线稳定资源站| 欧美性视频在线| 丝袜av一区| 欧美韩国日本在线| 久久久久国产精品免费免费搜索| av资源免费观看| 日韩成人在线观看| 欧美调教sm| 欧美精品一区在线| 久久婷婷麻豆| 自拍偷拍视频亚洲| 欧美日韩一区不卡| 最新真实国产在线视频| 91精品国产综合久久香蕉922| 日韩激情一区| 拔插拔插华人永久免费| 1024国产精品| www.97超碰| 久久久久久国产三级电影| eeuss国产一区二区三区四区| 男女视频网站在线观看| 91免费看视频| 最近中文字幕在线免费观看| xxxx欧美18另类的高清| 国产一区二区三区亚洲综合| 国产毛片久久久久久国产毛片| 成人91在线观看| 91青青草视频| 日韩最新av在线| 日韩成人在线看| 少妇高潮喷水在线观看| 91日韩一区二区三区| 中文字幕日本视频| 欧美成人免费全部| 欧美1区二区| 又色又爽又高潮免费视频国产| 亚洲国产精品精华液2区45| a级片在线视频| 91精品国产91久久久久久吃药 | 久久久国产在线视频| 99re6热只有精品免费观看| 国产午夜伦鲁鲁| 国产女人18水真多18精品一级做 | 日本一区二区免费在线观看| 日韩精品中文字| 国产香蕉久久| 日本香蕉视频在线观看| 久久久久久久av麻豆果冻| 国产又大又黑又粗| 91精品国产91| 久久久久久久久久久9不雅视频| 亚洲精品乱码久久| 欧美日韩另类一区| av成人影院在线| 亚洲国产日韩欧美| 不卡的av电影| 一区不卡在线观看| 97高清免费视频| 国产精品麻豆久久| 99久久久久久久久久| 7777精品伊人久久久大香线蕉经典版下载 | 成人性生交大片免费看无遮挡aⅴ| 日韩精品影音先锋| 电影久久久久久| 免费看黄在线看| 亚洲同性同志一二三专区| 视频午夜在线| 国产精品二区三区四区| 奇米777欧美一区二区|