【GoCN酷Go推薦】golang 打樁測(cè)試庫(kù) gostub
一、gostub簡(jiǎn)介
1、gostub是什么?
GoStub是一款輕量級(jí)的單元測(cè)試框架,接口友好,可以對(duì)全局變量、函數(shù)或過(guò)程進(jìn)行打樁。
2、應(yīng)用場(chǎng)景有哪些?
場(chǎng)景1:打樁全局變量
場(chǎng)景2:打樁普通函數(shù)
場(chǎng)景3:打樁系統(tǒng)函數(shù)
3、常用方法有哪些?
func New() *Stubs
New返回用于打樁變量的*Stubs變量
func (s *Stubs) Reset()
Reset重置打樁的所有變量到其原始值
func (s *Stubs) ResetSingle(varToStub interface{})
ResetSingle重置打樁的單個(gè)變量到其原始值
func (s *Stubs) SetEnv(k, v string) *Stubs
SetEnv設(shè)置指定的環(huán)境變量到指定值
func (s *Stubs) UnsetEnv(k string) *Stubs
UnsetEnv還原指定環(huán)境變量的值
最常用的兩個(gè)函數(shù)如下
func (s *Stubs) Stub(varToStub interface{}, stubVal interface{}) *Stubs
Stub使用stubVal替代存儲(chǔ)在varToStub變量的值
varToStub必須是指向變量的指針。
stubVal是可賦值到變量的類型
func (s *Stubs) StubFunc(funcVarToStub interface{}, stubVal ...interface{}) *Stubs
StubFunc用返回stubval值的函數(shù)替換函數(shù)變量,返回*Stubs類型變量
funcVarToStub是指向函數(shù)變量的指針。如果函數(shù)返回多個(gè)值,返回的多個(gè)值被傳遞給StubFunc。
二、安裝部署
go get github.com/prashantv/gostub
三、使用方法
3.1 打樁全局變量
//場(chǎng)景1:給全局變量打樁
func stubValue() {
//初始值為100
num := 100
fmt.Println("origin value is:", num)
//stub打樁后的值
stubs := gostub.Stub(&num, 150)
fmt.Println("after stub, value is:", num)
//還原到之前的值
stubs.Reset()
fmt.Println("after stub reset, value is:", num)
}
3.2 打樁普通函數(shù)
//場(chǎng)景2:給普通函數(shù)打樁
func Exec(cmd string) (string, error) {
return "hello world", errors.New("I am error!")
}
func stubFunc() {
var (
output string
)
//不能直接把Exec傳遞給gostub.StubFunc
var Exec = Exec //very important!!!
stubs := gostub.StubFunc(&Exec, "haolipeng", errors.New("stub error string")) //打樁
output, _ = Exec("action") //調(diào)用函數(shù)
fmt.Printf("output: %s\n", output) //驗(yàn)證結(jié)果
stubs.Reset()
}
3.3 打樁系統(tǒng)庫(kù)函數(shù)
//場(chǎng)景3:給標(biāo)準(zhǔn)庫(kù)函數(shù)打樁(函數(shù)返回多返回值)
func stubLibraryFunc() {
host, err := os.Hostname()
if err == nil {
fmt.Printf("host:%s\n", host)
}
var hostName = os.Hostname
stubs := gostub.StubFunc(&hostName, "localhost", nil)
host, err = hostName() //import
if err == nil {
fmt.Printf("after stub host:%s\n", host)
}
defer stubs.Reset()
}
3.4 打樁系統(tǒng)環(huán)境變量
//場(chǎng)景4:設(shè)置環(huán)境變量
func stubEnv() {
stubs := gostub.New()
stubs.SetEnv("GOSTUB_VAR", "test_value") //設(shè)置環(huán)境變量
stubs.Reset()
}
四、總結(jié)
gostub基本上滿足平時(shí)的測(cè)試需求,但是如果想更好的測(cè)試自己的程序,還需要搭配上其他的測(cè)試框架才行。
歡迎加入我們GOLANG中國(guó)社區(qū):https://gocn.vip/
《酷Go推薦》招募:
各位Gopher同學(xué),最近我們社區(qū)打算推出一個(gè)類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個(gè)庫(kù)或者好的項(xiàng)目,然后寫一點(diǎn)這個(gè)庫(kù)使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到
新的庫(kù),并且知道怎么用。
大概規(guī)則和每日新聞?lì)愃疲绻麍?bào)名人多的話每個(gè)人一個(gè)月輪到一次,歡迎大家報(bào)名!(報(bào)名地址:https://wj.qq.com/s2/7734329/3f51)
掃碼也可以加入 GoCN 的大家族喲~
