一。简介
前面我们介绍了testify和convery框架的使用,接下来我们将学习一下go的一款stub框架gostub。
gostub是一款轻量级的单元测试框架,接口友好,可以对全局变量、函数或过程进行打桩。
gostub 打桩的原理式通过反射,所以要求调用 stub 函数传入第一个参数必须是指针,然而函数并没有指针的概念,所以需要对函数做侵入式修改。这个目前业界用的也不多,我们简单学习一下如何用就行。
二。如何使用?
1. 安装
代码语言:txt复制go get github.com/prashantv/gostub
2. 使用
代码语言:txt复制func TestCalculate_stub(t *testing.T) {
assert := assert.New(t)
num := 10
f := Calculate
y1 := f(num)
assert.Equal(y1, 9)
// 变量stub
stubs := Stub(&num, 150)
defer stubs.Reset()
y2 := f(num)
assert.Equal(y2, 149)
// 函数stub1
defer stubs.Stub(&f, func(x int) int {
return x 1
}).Reset()
assert.Equal(f(num), 151)
// 函数stub2
defer stubs.StubFunc(&f, 120).Reset()
assert.Equal(f(num), 120)
// 没有返回值的函数称之为过程,stub可以为过程打桩
clean := CloseUserCache
defer stubs.Stub(&clean, func(s string) {
fmt.Println(fmt.Sprintf("Clean %s old cache", s))
}).Reset()
clean("ggr")
}
更多请参考官方文档:https://pkg.go.dev/github.com/prashantv/gostub#pkg-types