sqlmock 不符查詢,但查詢相同且日誌輸出顯示相同
在編寫使用Gorm 和sqlmock 測試程式碼時遇到一個問題,主要是有關更新函數。
第一個工作流程部分僅從資料庫中查詢記錄。即使日誌輸出顯示它們相同,我也無法使其與我的 SQL 相符。
錯誤訊息如下:
(database.go:263) [2020-01-08 10:29:40] 查询:无法匹配实际 SQL:“SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1” with expected regexp "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1"
我也嘗試使用 ExpectExec 插入 ExpectQuery。
for _, c := range cases { db, mock, err := sqlmock.New() if err != nil { t.Fatal(err) } DB, err := gorm.Open("sqlite3", db) if err != nil { t.Fatal(err) } DB.LogMode(true) mock.ExpectQuery(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`) err = UpdateStoragePool(DB, &c.givenPool) if !reflect.DeepEqual(c.wantedError, err) { t.Fatalf("expecting errror %q, got %q", c.wantedError, err) } // 如果事务期间没有发生任何错误,则检查是否满足所有预期 if c.wantedError == nil { if err := mock.ExpectationsWereMet(); err != nil { t.Fatalf(err.Error()) } } }
我也試過:
mock.ExpectQuery(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = '1')) ORDER BY "storage_pools"."id" ASC LIMIT 1`).WithArgs(1) mock.ExpectExec(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`) mock.ExpectExec(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = '1')) ORDER BY "storage_pools"."id" ASC LIMIT 1`).WithArgs(1)
這個問題的原因可能有兩種可能:
以上是為什麼「sqlmock」無法匹配查詢,即使查詢相同且日誌顯示它們相同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!