<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【GoCN酷Go推薦】golang 打樁測(cè)試庫(kù) gostub

          共 3734字,需瀏覽 8分鐘

           ·

          2021-07-04 12:24

          一、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 的大家族喲~


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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美欧美欧美 | 中文字幕在线不卡视频 | 无码高清毛片在线观看 | 国产99九九久久无码精品 | 国产一卡二卡三卡免费观看 |