Home >Backend Development >Golang >How to write unit tests elegantly using go
The following column will introduce to you how to use go to write unit tests elegantly, I hope it will be helpful to friends in need!
Background
Implementation Principle
Application in the project
package unitTestfunc InitMySQL() error{ return db.Init(constant.MySQLDSN, constant.MaxIdleConns, constant.MaxOpenConns, time.Duration(constant.ConnMaxLifetime)*time.Second, constant.EnableSqlLog)//其他包中已经封装了初始化函数,在测试包的初始化函数中调用即可}func CloseDB() error{ return db.Close()}We store the corresponding parameters under another content package:
package constantconstant( MySQLDSN = "username:password@addresss/db?timeout=5000ms&readTimeout=5s&charset=utf8mb4" MaxIdleConns = 20 MaxOpenConns = 20 ConnMaxLifetime = 60 EnableSqlLog = true MerchantID = 6666 SheetID = "SZSWIMTEST" Operator = "XXXX@XXXX")
Perform unit testing
type ActionLogRepo struct { basetest.BaseSuite}
The second part is to initialize Register. The Register function can pass in four parameters fun1, fun2, fun3, fun4
fun1: The test file is executed once at the very beginning.
fun2: Execute once before each unit test.
fun4: The final execution in this test file.
According to requirements, we need to perform an initialization database operation before all unit tests start, and close the database at the end.
func TestActionLogRepo(t *testing.T) { AgentSuite := new(ActionLogRepo) var err error AgentSuite.Register( func() { err = unitTest.InitMySQL() }, nil, nil, func() { err = unitTest.CloseDB() }) assert.Nil(t,err) suite.Run(t, AgentSuite)}
func (suite *ActionLogRepo) TestActionLog() { repo := repository.NewRepository()//获取数据库 actionLog := &model.ActionLogTab{XXXXXX} err := CreateActionLog(actionLog)//创建测试的数据记录 assert.Nil(suite.T(),err) logs,count,err := FetchActionLogs(repo,repo.MerchantID,actionLog.SheetID,actionLog.SheetType,1,1)//需要测试的函数 assert.Nil(suite.T(),err) assert.Equal(suite.T(),logs[0].OperationTime,actionLog.OperationTime)//验证函数的正确性 err = repo.MerchantDB().Delete(actionLog).Error//删除掉测试的数据库记录 assert.Nil(suite.T(),err)}
package testtype ActionLogRepo struct { basetest.BaseSuite}func TestActionLogRepo(t *testing.T) { AgentSuite := new(ActionLogRepo) var err error AgentSuite.Register( func() { err = unitTest.InitMySQL() }, nil, nil, func() { err = unitTest.CloseDB() }) assert.Nil(t,err) suite.Run(t, AgentSuite)}func (suite *ActionLogRepo) TestActionLog() { repo := repository.NewRepository()//获取数据库 actionLog := &model.ActionLogTab{XXXXXX} err := CreateActionLog(actionLog)//创建测试的数据记录 assert.Nil(suite.T(),err) logs,count,err := FetchActionLogs(repo,repo.MerchantID,actionLog.SheetID,actionLog.SheetType,1,1)//需要测试的函数 assert.Nil(suite.T(),err) assert.Equal(suite.T(),logs[0].OperationTime,actionLog.OperationTime)//验证函数的正确性 err = repo.MerchantDB().Delete(actionLog).Error//删除掉测试的数据库记录 assert.Nil(suite.T(),err)}
The above is the detailed content of How to write unit tests elegantly using go. For more information, please follow other related articles on the PHP Chinese website!