golang测试框架gostub的使用

2022-06-30 10:27:06 浏览数 (1)

一。简介

前面我们介绍了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

0 人点赞