Maison >développement back-end >Golang >Comment écrire des tests unitaires avec élégance en utilisant go
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()}Nous. stocker les paramètres correspondants sous un autre package de contenu :
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")
Les tests unitaires sont principalement se compose de trois parties :
La première partie est une méthode d'écriture fixe
type ActionLogRepo struct { basetest.BaseSuite}La deuxième partie consiste à initialiser Register La fonction Register peut passer quatre paramètres fun1, fun2, fun3, fun4
fun1. : Le fichier de test est exécuté une fois au tout début.
fun2 : exécuté une fois avant chaque test unitaire.
fun3 : exécuté une fois après chaque test unitaire.
fun4 : L'exécution finale dans ce fichier de test.
Selon les exigences, nous devons effectuer une opération d'initialisation de la base de données avant le début de tous les tests unitaires et fermer la base de données à la fin.
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)}La troisième partie consiste à effectuer des tests unitaires. Nous créons d'abord les données correspondantes dans la base de données, puis appelons la fonction qui nécessite des tests unitaires pour opérer sur les données, puis utilisons assert pour vérifier le résultat. , N'oubliez pas de supprimer les enregistrements de tests unitaires.
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)}La structure finale du fichier de test est la suivante :
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)}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!