【GoCN酷Go推荐】golang 打桩测试库 gostub

一、gostub简介

1、gostub是什么?

GoStub是一款轻量级的单元测试框架,接口友好,可以对全局变量、函数或过程进行打桩。

2、应用场景有哪些?

场景1:打桩全局变量

场景2:打桩普通函数

场景3:打桩系统函数

3、常用方法有哪些?

func New() *Stubs

New返回用于打桩变量的*Stubs变量

func (s *Stubs) Reset()

Reset重置打桩的所有变量到其原始值

func (s *Stubs) ResetSingle(varToStub interface{})

ResetSingle重置打桩的单个变量到其原始值

func (s *Stubs) SetEnv(k, v string) *Stubs

SetEnv设置指定的环境变量到指定值

func (s *Stubs) UnsetEnv(k string) *Stubs

UnsetEnv还原指定环境变量的值

最常用的两个函数如下

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值的函数替换函数变量,返回*Stubs类型变量

funcVarToStub是指向函数变量的指针。如果函数返回多个值,返回的多个值被传递给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 打桩普通函数

//场景2:给普通函数打桩
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") //调用函数

   fmt.Printf("output: %s\n", output) //验证结果

   stubs.Reset()
}

3.3 打桩系统库函数

//场景3:给标准库函数打桩(函数返回多返回值)
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 打桩系统环境变量

//场景4:设置环境变量
func stubEnv() {
   stubs := gostub.New()
   stubs.SetEnv("GOSTUB_VAR", "test_value") //设置环境变量
   stubs.Reset()
}

四、总结

gostub基本上满足平时的测试需求,但是如果想更好的测试自己的程序,还需要搭配上其他的测试框架才行。

还想了解更多吗?

欢迎加入我们GOLANG中国社区:https://gocn.vip/

《酷Go推荐》招募:

各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

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

大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!(报名地址:https://wj.qq.com/s2/7734329/3f51)

扫码也可以加入 GoCN 的大家族哟~

【GoCN酷Go推荐】golang 打桩测试库 gostub_第1张图片

你可能感兴趣的:(单元测试,指针,css,xhtml,go)