GoStub
github地址:github.com/prashantv/gostub
gostub的使用场景如下:
- 为一个全局变量打桩
- 为一个函数打桩
- 为一个过程打桩:当一个函数没有返回值时,该函数我们一般称为过程。
func Test_stub(t *testing.T) {
// 为全局变量打桩
stubs := gostub.Stub(&num, 150)
defer stubs.Reset()
fmt.Println(num)
// 对函数/过程打桩
var Exec = func(cmd string, args ...string) {
fmt.Println("function original")
}
stubsFunc := gostub.Stub(&Exec, func(cmd string, args ...string) {
fmt.Println("function stub")
})
defer stubsFunc.Reset()
Exec("test")
// 也可以直接用gostub.StubFunc() 对函数打桩
}
gostub是一款轻量级打桩框架,虽然已经可以优雅的解决很多场景的函数打桩问题,但对于一些复杂的情况,却只能干瞪眼。
同时,GoStub框架需要改造函数,不符合我们的日常习惯