go语言有很多的测试框架,但是个人感觉还是Convey+Monkey的使用比较简单方便,Convey作为外部框架,monkey可以为函数和方法进行打桩。
一个简单的示例来说明如何对函数进行打桩
示例:
func Readfile(filename string, m interface{}) error{
_,err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println("readfile:[%s] error:[%s]", filename, err.Error())
return err
}
return nil
}
Readfile函数中调用了ioutil.ReadFile,假设要对该函数写UT测试用例的话,不可避免就要对其进行打桩,因为系统不存在要读取的filename文件,自然读取不到数据。
func TestReadfile(t *testing.T){
Convey("Teststring2json",t, func() {
filename := ""
m := []interface{}{}
pathes := applyfunc(ioutil.ReadFile, func(_ string) ([]byte, error) {
return []byte{},nil
})
defer pathes.Reset()
err := Readfile(filename , m)
So(err,shouldBeNil)
})
}
因为filename不存在,不可避免的ioutil.ReadFile(filename)返回的err != nil,那么return 的必然是err的错误信息,打桩之后,给他返回来的就是nil,那么执行的就是return nil
【go语言测试框架Convey+Monkey的使用】其实,打桩的目的就是不关注需要打桩函数的具体执行调用过程,将全部的精力放在自己当前所写的函数之上。
推荐阅读
- Go|Docker后端部署详解(Go+Nginx)
- GO|GO,GO,GO!
- Go成长之路|go中判断空字符串、nil和len(t)的用法
- go编译tools
- go grpc安装与使用
- goroutine 调度原理
- Go|Go进阶之路——复杂类型
- Go进阶之路——变量
- Go进阶之路——流程控制语句