bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

使用go優(yōu)雅地撰寫單元測試的方法-創(chuàng)新互聯(lián)

小編給大家分享一下使用go優(yōu)雅地撰寫單元測試的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)公司是一家專注于成都網站設計、成都網站制作與策劃設計,普安網站建設哪家好?成都創(chuàng)新互聯(lián)公司做網站,專注于網站建設十載,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:普安等地區(qū)。普安做網站價格咨詢:18982081108

                                                       

背景

剛剛加入一個年輕的小組,代碼中的單元測試還沒有來得及寫,leader希望我通過單元測試來熟悉項目的業(yè)務邏輯。但是,代碼量實在有點多,高效的完成單元測試成為首要目標。

實現原理

單元測試測用的是testify的測試框架,使用起來非常方便,具體的基礎使用方法可以參考中文testify博客以及官方文檔。

項目中的應用

初始化單元測試

在一個復雜的Web項目中,測試某一模塊的功能往往需要先對這一模塊所使用到的服務進行初始化,我們將初始化函數以及初始化函數所使用到的參數都放在同一個單元測試包下,例如對MySQL的初始化如下:

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()}

我們在另一個contant包下存放對應的參數:

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")

進行單元測試

以下以對數據庫的操作為例
單元測試主要由三部分組成:
第一部分為固定寫法

type ActionLogRepo struct {
    basetest.BaseSuite}

第二部分為對Register進行初始化,Register函數可以傳入四個參數fun1,fun2,fun3,fun4
fun1:在該測試文件中的最開始執(zhí)行一次。
fun2:在每個單元測試前都執(zhí)行一次。
fun3:在每個單元測試后都執(zhí)行一次。
fun4:在該測試文件中的最終執(zhí)行一次。
根據需求,我們需要在所有單元測試開始前執(zhí)行一次初始化數據庫操作,以及在最后關閉數據庫。

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)}

第三部分,進行單元測試,我們先在數據庫中建立對應的數據,然后調用需要單元測試的函數進行對該數據的操作,之后使用assert對該結果進行驗證,最后要記得刪除掉單元測試的記錄。

func (suite *ActionLogRepo) TestActionLog() {
    repo := repository.NewRepository()//獲取數據庫
    actionLog := &model.ActionLogTab{XXXXXX}
    err := CreateActionLog(actionLog)//創(chuàng)建測試的數據記錄
    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)//創(chuàng)建測試的數據記錄
    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)}

看完了這篇文章,相信你對使用go優(yōu)雅地撰寫單元測試的方法有了一定的了解,想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)-成都網站建設公司行業(yè)資訊頻道,感謝各位的閱讀!

分享標題:使用go優(yōu)雅地撰寫單元測試的方法-創(chuàng)新互聯(lián)
當前網址:http://vcdvsql.cn/article16/jgegg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化App開發(fā)品牌網站制作面包屑導航移動網站建設ChatGPT

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網站優(yōu)化