Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `sqlmock` gagal untuk memadankan pertanyaan walaupun pertanyaan adalah sama dan log menunjukkannya adalah sama?
sqlmock tidak sepadan dengan pertanyaan, tetapi pertanyaan adalah sama dan output log menunjukkan yang sama
Menghadapi isu semasa menulis ujian kod menggunakan Gorm dan sqlmock , terutamanya berkaitan dengan fungsi kemas kini.
Bahagian aliran kerja pertama hanya menanyakan rekod daripada pangkalan data. Walaupun output log menunjukkan ia adalah sama, saya tidak dapat memadankannya dengan SQL saya.
Mesej ralat adalah seperti berikut:
(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"
Saya juga cuba menggunakan ExpectExec untuk memasukkan 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()) } } }
Saya juga mencuba:
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)
Mungkin ada dua sebab yang mungkin untuk masalah ini:
Atas ialah kandungan terperinci Mengapakah `sqlmock` gagal untuk memadankan pertanyaan walaupun pertanyaan adalah sama dan log menunjukkannya adalah sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!