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 ?

Pourquoi mon Sqlmock ne correspond-il pas à ma requête malgré une entrée et une sortie de journal identiques ?

Mary-Kate Olsen
Libérer: 2024-11-11 00:57:03
original
847 Les gens l'ont consulté

Why Is My Sqlmock Not Matching My Query Despite Identical Input and Log Output?

Sqlmock ne correspond pas à la requête malgré une entrée et une sortie de journal identiques

Problème d'incompatibilité de requête

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.

Solution

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`))
Copier après la connexion

Problème de non-concordance d'exécution

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)
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal