Maison >développement back-end >Golang >Pourquoi sqlmock ne parvient-il pas à correspondre à ma requête malgré un texte identique ?

Pourquoi sqlmock ne parvient-il pas à correspondre à ma requête malgré un texte identique ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-10 19:00:04665parcourir

Why Is sqlmock Failing to Match My Query Despite Identical Text?

sqlmock ne correspond pas à la requête, malgré un texte identique

Message d'erreur :

could not match actual 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"

lors de l'utilisation de sqlmock avec Gorm peut être frustrant. Bien que la sortie du journal affiche des requêtes identiques, la correspondance échoue.

Le problème sous-jacent ici est la différence entre le texte SQL et la syntaxe SQL. Bien que le texte de la requête puisse sembler identique, de petites variations syntaxiques peuvent entraîner des problèmes. Pour résoudre ce problème, assurez-vous que la chaîne de requête attendue dans votre simulation correspond au texte littéral de la requête en cours d'exécution.

Une solution possible consiste à utiliser la fonction regexp.QuoteMeta() pour échapper aux métacaractères de la requête attendue. :

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`))

En plaçant le texte de la requête entre guillemets littéraux, regexp.QuoteMeta() garantit que tous les caractères spéciaux ou métacaractères de la chaîne sont traités littéralement, les empêchant d'interférer avec le processus de correspondance. Cela devrait résoudre le problème et permettre à sqlmock de correspondre correctement à la requête.

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:
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