testing

testify

testify是一个第三方开发的测试工具包,支持如下特性:

断言(Easy assertions)

Mocking

创建接口

type Stringer interface {
	String() string
}

自动生成mock程序

mockery -name=Stringer 

// Stringer is an autogenerated mock type for the Stringer type
type Stringer struct {
	mock.Mock
}

// String provides a mock function with given fields:
func (_m *Stringer) String() string {
	ret := _m.Called()

	var r0 string
	if rf, ok := ret.Get(0).(func() string); ok {
		r0 = rf()
	} else {
		r0 = ret.Get(0).(string)
	}

	return r0
}

Testing suite interfaces and functions

​ 使用testify/suite 我们可以基于struct构建测试的初始化环境,并且在测试完成之后恢复环境,通过SetupTest和TearDownSuite接口。

type ExampleTestSuite struct {
	suite.Suite
	VariableThatShouldStartAtFive int
}

// 准备测试环境
func (suite *ExampleTestSuite) SetupTest() {
	log.Println("SetupTest")
	suite.VariableThatShouldStartAtFive = 5
}
// 恢复测试环境
func (suite *ExampleTestSuite) TearDownTest() {
	log.Println("TearDownTest")
}
// 测试案例
func (suite *ExampleTestSuite) TestExample() {
	assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive)
	suite.Equal(5, suite.VariableThatShouldStartAtFive)
}
// 执行ExampleTestSuite结构体里面的全部测试函数
func TestExampleTestSuite(t *testing.T) {
	// 运行ExampleTestSuite中Test开始的函数
	suite.Run(t, new(ExampleTestSuite))
}

参考资料