Maison >développement back-end >Golang >Pourquoi mon Sqlmock ne correspond-il pas à ma requête malgré une entrée et une sortie de journal identiques ?
Lorsque vous essayez d'écrire des tests pour une fonction Gorm à l'aide de sqlmock, vous peut rencontrer un problème où sqlmock ne parvient pas à correspondre à votre requête SQL, même si la sortie du journal affiche des requêtes identiques. Cette incompatibilité peut se produire lors de l'utilisation de la méthode ExpectQuery.
Pour résoudre ce problème, il est recommandé d'utiliser regexp.QuoteMeta() pour échapper à votre requête avant de la transmettre à la méthode ExpectQuery. Cette fonction échappera correctement à tous les caractères spéciaux susceptibles d'être à l'origine de l'incompatibilité. Le code mis à jour ressemblerait à ceci :
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`))
Vous pouvez également rencontrer un autre problème où sqlmock ne correspondra pas à votre instruction SELECT. En effet, Gorm exécute plusieurs instructions SELECT pour une raison quelconque. La première instruction trouvera la ligne, mais pas la deuxième instruction.
Pour résoudre ce problème, vous pouvez utiliser QueryMatcherOption(sqlmock.QueryMatcherEqual) en conjonction avec ExpectQuery pour forcer sqlmock à utiliser une correspondance de chaîne exacte au lieu de sa algorithme de correspondance plus flou par défaut.
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err != nil { t.Fatal(err) }
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!