1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【GoCN酷Go推薦】golang 打樁測試庫 gostub

        共 3734字,需瀏覽 8分鐘

         ·

        2021-07-04 12:24

        一、gostub簡介

        1、gostub是什么?

        GoStub是一款輕量級的單元測試框架,接口友好,可以對全局變量、函數(shù)或過程進(jìn)行打樁。

        2、應(yīng)用場景有哪些?

        場景1:打樁全局變量

        場景2:打樁普通函數(shù)

        場景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替代存儲在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 打樁全局變量

        //場景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ù)

        //場景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)庫函數(shù)

        //場景3:給標(biāo)準(zhǔn)庫函數(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)境變量

        //場景4:設(shè)置環(huán)境變量
        func stubEnv() {
           stubs := gostub.New()
           stubs.SetEnv("GOSTUB_VAR""test_value"//設(shè)置環(huán)境變量
           stubs.Reset()
        }

        四、總結(jié)

        gostub基本上滿足平時(shí)的測試需求,但是如果想更好的測試自己的程序,還需要搭配上其他的測試框架才行。


        還想了解更多嗎?

        歡迎加入我們GOLANG中國社區(qū):https://gocn.vip/


        《酷Go推薦》招募:


        各位Gopher同學(xué),最近我們社區(qū)打算推出一個(gè)類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個(gè)庫或者好的項(xiàng)目,然后寫一點(diǎn)這個(gè)庫使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到

        新的庫,并且知道怎么用。


        大概規(guī)則和每日新聞類似,如果報(bào)名人多的話每個(gè)人一個(gè)月輪到一次,歡迎大家報(bào)名?。▓?bào)名地址:https://wj.qq.com/s2/7734329/3f51)


        掃碼也可以加入 GoCN 的大家族喲~


        瀏覽 97
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲中文自拍 | 欧美特黄一级AAAA片 | 天天爱天天射 | 成人AV天堂 | 日本丰满岳妇伦3在线观看 | 芙宁娜坐旅行者的胡萝卜 | 欧美在线视频一区 | 妈妈你真棒插曲快来救救我电影评书 | 99热最新国产 | 久久久女 |