Maison > Article > développement back-end > Pourquoi « sqlmock » ne parvient-il pas à correspondre à une requête même si les requêtes sont identiques et que les journaux montrent qu'elles sont identiques ?
sqlmock ne correspond pas à la requête, mais la requête est la même et la sortie du journal affiche la même chose
J'ai rencontré un problème lors de l'écriture du test code utilisant Gorm et sqlmock , principalement lié à la fonction de mise à jour.
La première section de workflow interroge uniquement les enregistrements de la base de données. Même si la sortie du journal montre qu'ils sont identiques, je n'arrive pas à le faire correspondre à mon SQL.
Le message d'erreur est le suivant :
(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"
J'ai également essayé d'utiliser ExpectExec pour insérer 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()) } } }
J'ai aussi essayé :
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)
Il peut y avoir deux raisons possibles à ce problème :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!