Maison >développement back-end >Golang >Pourquoi Sqlmock ne parvient-il pas à correspondre à ma requête malgré une sortie identique dans le journal ?

Pourquoi Sqlmock ne parvient-il pas à correspondre à ma requête malgré une sortie identique dans le journal ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 16:59:02264parcourir

Why is Sqlmock Failing to Match My Query Despite Identical Output in the Log?

Sqlmock ne correspond pas à la requête malgré l'identité dans la sortie du journal

Message d'erreur

Lors de la tentative de correspondance avec une requête dans un test Gorm à l'aide de sqlmock, les éléments suivants une erreur est rencontrée :

(path/to/my/project/database.go:263)
[2020-01-08 10:29:40]  Query: 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"

Résolution

Le problème provient de l'utilisation de l'expression rationnelle comme outil de correspondance de requêtes sqlmock. Par défaut, sqlmock utilise un outil de correspondance de requêtes à égalité stricte, qui nécessite une correspondance exacte entre la requête réelle et le modèle attendu.

Pour résoudre ce problème, utilisez l'option QueryMatcherEqual pour remplacer l'outil de correspondance de requêtes par défaut :

QueryMatcherOption(sqlmock.QueryMatcherEqual)

Considérations supplémentaires

  • Assurez-vous que la requête sqlmock correspond à la chaîne de requête réelle, y compris les caractères spéciaux qui peuvent devoir être échappés.
  • Si la requête inclut des valeurs littérales , utilisez WithArgs() pour spécifier les arguments et échappez-les si nécessaire.
  • Si la requête inclut des fonctions ou des conditions complexes, utilisez regexp.QuoteMeta() pour la convertir en une expression régulière à laquelle sqlmock peut correspondre.

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