gomonkey是golang的一种打桩框架,目标是让用户在单元测试中低成本完成打桩,从而将经历聚焦于业务功能的开发。gomonkey接口友好,功能强大。另外,goconvey是一种针对golang的测试框架,可以管理和运行测试用例,同时提供了丰富的断言函数,支持多WEB界面特性。
gomonkey适用场景如下:支持为一个函数打一个桩
支持为一个成员方法打一个桩
支持为一个全局变量打一个桩
支持为一个函数变量打一个桩
支持为一个函数打一个特定的桩序列
支持为一个成员方法打一个特定的桩序列
支持为一个函数变量打一个特定的桩序列
下载
gomonkey以及goconvey下载方法:
go get github.com/agiledragon/gomonkey
go get github.com/smartystreets/goconvey
ApplyFunc
接口定义:
func ApplyFunc(target, double interface{}) *Patches
ApplyFunc 第一个参数是函数名,第二个参数是桩函数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
ApplyMethod
接口定义:
func ApplyMethod(target reflect.Type, methodName string, double interface{}) *Patches
ApplyMethod 第一个参数是目标类的指针变量的反射类型,第二个参数是字符串形式的方法名,第三个参数是桩函数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
ApplyGlobalVar
接口定义:
func ApplyGlobalVar(target, double interface{}) *Patches
ApplyGlobalVar 第一个参数是全局变量的地址,第二个参数是全局变量的桩。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
ApplyFuncVar
接口定义:
func ApplyFuncVar(target, double interface{}) *Patches
ApplyFuncVar 第一个参数是函数变量的地址,第二个参数是桩函数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
ApplyFuncSeq
接口定义:
func ApplyFuncSeq(target interface{}, outputs []OutputCell) *Patches
OutputCell定义如下:
type Params []interface{}
type OutputCell struct {
Values Params
Times int
}
ApplyFuncSeq 第一个参数是函数名,第二个参数是特定的桩序列参数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
ApplyMethodSeq
接口定义:
func ApplyMethod(target reflect.Type, methodName string, double interface{}) *Patches
ApplyMethodSeq 第一个参数是目标类的指针变量的反射类型,第二个参数是字符串形式的方法名,第三参数是特定的桩序列参数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
ApplyFuncVarSeq
接口定义:
func ApplyFuncVarSeq(target interface{}, outputs []OutputCell) *Patches
ApplyFuncVarSeq 第一个参数是函数变量地址,第二个参数是特定的桩序列参数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。待补充示例
sqlmock使用
比如sql中的query方法,ApplyMethod方法打桩的话,需要重新写query。目前开发底层都使用"http://github.com/go-sql-driver/mysql"数据库,都能够使用sqlmock库进行mock。
下载sqlmock
go get github.com/DATA-DOG/go-sqlmock待补充示例
参考文档