Heim >Backend-Entwicklung >Golang >Wie man Unit-Tests elegant mit go schreibt
Ich bin gerade einem jungen Team beigetreten und hatte noch keine Zeit, Unit-Tests im Code zu schreiben. Der Leiter hofft, dass ich mich durch Unit mit der Geschäftslogik des Projekts vertraut machen kann Tests. Allerdings ist die Menge an Code wirklich zu groß und die effiziente Durchführung von Unit-Tests wird zum Hauptziel.
Der Unit-Test verwendet das Test-Framework von testify, das sehr benutzerfreundlich ist. Informationen zu spezifischen grundlegenden Verwendungsmethoden finden Sie im chinesischen Testify-Blog und in offiziellen Dokumenten.
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()}
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")
für Unit-Tests
Das Folgende dauert Betrieb der Datenbank als Beispiel
Der Unit-Test besteht hauptsächlich aus drei Teilen:type ActionLogRepo struct { basetest.BaseSuite}Der zweite Teil ist die Initialisierung des Registers. Die Register-Funktion kann vier Parameter fun1, fun2, übergeben. fun3, fun4
fun2: Vor jedem Unit-Test einmal ausführen.
fun3: Nach jedem Unit-Test einmal ausführen.
fun4: Die endgültige Ausführung in dieser Testdatei.
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)}
Das obige ist der detaillierte Inhalt vonWie man Unit-Tests elegant mit go schreibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!