go 單元測試框架介紹


最近項目在補充單元測試,這里介紹以下幾個go里流行的單元測試框架。

gomock 

gostub

monkey

Convey

下面介紹下各個框架的主要用途

convey 主要用途是用來組織測試用例的

gomock 主要用來給接口打樁的。mockgen可以生成對應的接口測試文件。

gostub 主要用來給變量、函數、過程打樁 但是給函數打樁時,需要做侵入式修改

monkey 主要也是用來給變量、函數打樁的

gostub打樁的原理式通過反射,所以要求調用stub函數傳入第一個參數必須是指針,然而函數並沒有指針的概念,所以需要對函數做侵入式修改。

monkey打樁的原理則是在運行時通過匯編語句重寫可執行文件,將待打樁函數或方法的實現跳轉到樁實現,原理和熱補丁類似。但是moneky不是線程安全的,不能用在並發測試中

對於以上幾個框架,簡書上有大神已經做了詳細介紹了

下面給出鏈接

convey

https://www.jianshu.com/p/e3b2b1194830

gomock

https://www.jianshu.com/p/f4e773a1b11f

monkey

 https://www.jianshu.com/p/2f675d5e334e

gostub

https://www.jianshu.com/p/70a93a9ed186

這里簡單提一下convey

一般都是convey+monkey或者convey+gostub結合使用

package tests

import (
    "errors"
    . "github.com/smartystreets/goconvey/convey"
    "testing"
)

func Func(arg string) error {
    if len(arg) > 0 {
        return nil
    } else {
        return errors.New("arg is nil")
    }
}

func TestFunc(t *testing.T) {
    Convey("test Func", t, func() {
        Convey("Func should return nil when arg is not empty", func() {
            arg := "1"
            err := Func(arg)
            So(err, ShouldBeNil)
        })
        Convey("Func should return error when arg is empty", func() {
            arg := ""
            exceptErr := errors.New("arg is nil")
            err := Func(arg)
            So(err, ShouldBeError, exceptErr)
        })
    })
}

主要使用了兩個函數Convey和So函數

convey函數可以嵌套使用,第一個參數都是對測試用例的描述,第二個參數有所不同。外層的convery第二個參數必須時testing.T指針。第三個參數是函數,保存其他測試用例。內層的convey的第二個參數是測試執行函數

So函數用來對函數的返回值做判斷的。提供了很多類型,ShouldBeNil,ShouldBeERRor,ShouldBeEmpty等等。基本都覆蓋到了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM