網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
為什么要引用單元測(cè)試類
傳統(tǒng)方法的缺點(diǎn)分析
不方便,我們需要在main函數(shù)中去調(diào)用,這樣就需要去修改main函數(shù),如果現(xiàn)在項(xiàng)目正在運(yùn)行,就可能去停止項(xiàng)目
不利于管理,因?yàn)楫?dāng)我們測(cè)試多個(gè)函數(shù)或者多個(gè)模塊時(shí),都需要寫在main函數(shù),不利于我們管理和清晰我們的思路
單元測(cè)試基本介紹
Go語(yǔ)言中自帶有一個(gè)輕量級(jí)的測(cè)試框架testing和自帶的go test命令來(lái)實(shí)現(xiàn)單元測(cè)試和性能測(cè)試,testing框架和其他語(yǔ)言中的測(cè)試框架類似,可以基于這個(gè)框架寫針對(duì)相應(yīng)函數(shù)的測(cè)試用例,也可以基于該框架寫相應(yīng)的壓力測(cè)試用例
優(yōu)點(diǎn)
- 確保每個(gè)函數(shù)是可運(yùn)行,并且運(yùn)行結(jié)果是正確的
- 確保寫出來(lái)的代碼性能是好的
- 單元測(cè)試能及時(shí)的發(fā)現(xiàn)程序設(shè)計(jì)或?qū)崿F(xiàn)的邏輯錯(cuò)誤,使問(wèn)題及早暴露,便于問(wèn)題的定位解決,而性能測(cè)試的重點(diǎn)在于發(fā)現(xiàn)程序設(shè)計(jì)的一些問(wèn)題,讓程序能夠在高并發(fā)的情況下還能保持穩(wěn)定
Testing規(guī)范
1.測(cè)試用例文件名必須以 _test.go結(jié)尾
2.測(cè)試用例函數(shù)必須以Test開頭,一般來(lái)說(shuō)就是Test+被測(cè)試的函數(shù)名
3.測(cè)試用例函數(shù)的形參類型必須是*testing.T
4.一個(gè)測(cè)試用例文件中,可以由多個(gè)測(cè)試用例函數(shù)
5.當(dāng)出現(xiàn)錯(cuò)誤使,可以使用t.Fatalf來(lái)格式化輸出錯(cuò)誤信息,并退出程序
6.t.Logf方法可以輸出相應(yīng)的日志
7.測(cè)試用例函數(shù),并沒有放在main函數(shù)中,但是卻執(zhí)行了main函數(shù)
8.pass表示測(cè)試用例運(yùn)行成功,Fail表示測(cè)試用例運(yùn)行失敗
9.測(cè)試單個(gè)文件,一個(gè)要帶上被測(cè)試的源文件
go test -v cal_test.go cal.go
10.測(cè)試單個(gè)方法
go test -v -test.run 函數(shù)名
基本使用
cal.go
package main func add(n int)(int){ var sum int for i:=1;i<=n ;i++ { sum+=i } return sum }
cal_test.go
package main import "testing" //函數(shù)名規(guī)范 Test+要測(cè)試的函數(shù)名(t *testing) func TestAdd(t *testing.T){ res:=add(9) if(res!=55){ t.Fatalf("add(10)執(zhí)行錯(cuò)誤,期望值=%v 實(shí)際值=%v\n",55,res) } t.Logf("執(zhí)行正確!!") }
Golang運(yùn)行
命令行
案例
monster.go
package monster import ( "encoding/json" "fmt" "io/ioutil" ) type Monster struct { Name string Age int Skill string } func (this *Monster) Store() bool { data,err:=json.Marshal(this) if err!=nil{ fmt.Println("err=",err) return false } filename:="f:/test.ser" err2:=ioutil.WriteFile(filename,data,0666) if err2 !=nil{ fmt.Println("err=",err2) return false } return true } func (this *Monster) ReStore() bool { filename:="f:/test.ser" reader,err2:=ioutil.ReadFile(filename) if err2 !=nil{ fmt.Println("err=",err2) return false } err:=json.Unmarshal(reader,this) if err!=nil{ fmt.Println("err=",err) return false } return true }
monster_test.go
package monster import ( "fmt" "testing" ) func TestStore(t *testing.T) { monster:=&Monster{ Name: "張三", Age: 18, Skill: "打游戲", } flag:=monster.Store() if !flag{ t.Fatalf("monster.Store() 錯(cuò)誤,期望為%v,實(shí)際為%v",true,flag) } t.Logf("monster.Store()測(cè)試成功") } func TestRestore(t *testing.T) { var monster=&Monster{} flag:=monster.ReStore() if !flag{ t.Fatalf("monster.ReStore() 錯(cuò)誤,期望為%v,實(shí)際為%v",true,flag) } t.Logf("monster.Store()測(cè)試成功") fmt.Println(monster) //&{張三 18 打游戲} }
原文鏈接:https://juejin.cn/post/7146112523429740575
相關(guān)推薦
- 2022-04-28 Python語(yǔ)言中的數(shù)據(jù)類型-序列_python
- 2022-06-22 Docker中?container?和?image?的命名_docker
- 2022-09-26 Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測(cè)的示例_C 語(yǔ)言
- 2022-09-08 Go語(yǔ)言中make和new函數(shù)的用法與區(qū)別_Golang
- 2022-05-12 centos7.6升級(jí)glibcln: relocation error: /lib64/libc
- 2022-01-30 uniapp H5刷新404問(wèn)題解決 apache配置
- 2022-03-21 C++名稱空間介紹_C 語(yǔ)言
- 2022-05-10 Element-ui 中 Table 表格的設(shè)置表頭/去除下標(biāo)線/設(shè)置行間距等屬性的使用及 slot
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支