亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

golang單元測試 數據庫對象fake

2024-11-14 09:41:51
6
0

var ( sqliteDBConn *gorm.DB ) func GetInMemoryDB() *gorm.DB { return sqliteDBConn } func InitInMemoryDB() { var err error sqliteDBConn, err = gorm.Open(sqlite.Open(":memory:"), &gorm.Config{ DisableForeignKeyConstraintWhenMigrating: true, }) if err != nil { panic(err) } }

在單測啟動前,調用 InitInMemoryDB 來初始化,拿到一個基于我們的內存 SQLite 生成的 *gorm.DB 對象,并通過 GetInMemoryDB 返回即可。

對于業務代碼來說,我們只需要傳入這個內存 SQLite 的 *gorm.DB 作為 MySQL 的平替,其他邏輯都不需要改變,非常方便。

當然,Fake 帶來的另一個問題也需要解決。

你既然是 Fake,那等于說是個新的數據庫,并沒有我們此前在線上環境建好的那些數據表,我們如果直接跑測試,INSERT 數據的時候是要報錯的。

此時我們可以直接把自己的 Model 指針傳入 db.AutoMigrate 方法,GORM 會自行幫我們創建相關的表。

這樣,完美替代mysql的數據庫和表,就創建完畢,可以愉快的開始寫單測了

0條評論
0 / 1000
****偉
4文章數
0粉絲數
****偉
4 文章 | 0 粉絲
原創

golang單元測試 數據庫對象fake

2024-11-14 09:41:51
6
0

var ( sqliteDBConn *gorm.DB ) func GetInMemoryDB() *gorm.DB { return sqliteDBConn } func InitInMemoryDB() { var err error sqliteDBConn, err = gorm.Open(sqlite.Open(":memory:"), &gorm.Config{ DisableForeignKeyConstraintWhenMigrating: true, }) if err != nil { panic(err) } }

在單測啟動前,調用 InitInMemoryDB 來初始化,拿到一個基于我們的內存 SQLite 生成的 *gorm.DB 對象,并通過 GetInMemoryDB 返回即可。

對于業務代碼來說,我們只需要傳入這個內存 SQLite 的 *gorm.DB 作為 MySQL 的平替,其他邏輯都不需要改變,非常方便。

當然,Fake 帶來的另一個問題也需要解決。

你既然是 Fake,那等于說是個新的數據庫,并沒有我們此前在線上環境建好的那些數據表,我們如果直接跑測試,INSERT 數據的時候是要報錯的。

此時我們可以直接把自己的 Model 指針傳入 db.AutoMigrate 方法,GORM 會自行幫我們創建相關的表。

這樣,完美替代mysql的數據庫和表,就創建完畢,可以愉快的開始寫單測了

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0