Maison  >  Article  >  développement back-end  >  Pourquoi ma requête SQLMock ne correspond-elle pas ?

Pourquoi ma requête SQLMock ne correspond-elle pas ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 07:39:02704parcourir

Why Isn't My SQLMock Query Matching?

Dépannage des problèmes de correspondance des requêtes SQLMock

Lorsque vous utilisez SQLMock pour simuler des requêtes, vous pouvez rencontrer des situations dans lesquelles la requête à laquelle vous vous attendez ne correspond pas, malgré son apparence identique dans la sortie du journal. Cet article abordera les raisons courantes de cette inadéquation et proposera des solutions.

Pourquoi la correspondance des requêtes n'est-elle pas ?

La première étape consiste à vérifier que votre requête est bien identique à la requête attendue. Cependant, des différences subtiles dans la syntaxe ou dans la gestion des arguments peuvent entraîner des incohérences.

Solution : Regexp.QuoteMeta()

Un problème courant survient lors de l'utilisation de caractères spéciaux dans la requête. SQLMock peut interpréter ces caractères différemment de votre code. Pour garantir une correspondance exacte, vous pouvez utiliser la fonction regexp.QuoteMeta() pour échapper à la chaîne de requête. Par exemple :

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

Cela garantit que tous les caractères spéciaux sont traités comme des littéraux, évitant ainsi les incohérences.

Incohérences intermittentes avec les instructions Select

Vous avez mentionné que les instructions select n'étaient pas travailler avec ExpectExec(). En effet, ExpectExec() attend une instruction update ou insert, pas une instruction select. Pour les instructions select, utilisez plutôt ExpectQuery().

mock.ExpectQuery(`SELECT \* FROM "storage_pools"`).
    WithArgs(c.givenPool.PoolId).WillReturnResult(sqlmock.NewResult(1, 1))

Considérations supplémentaires

  • Assurez-vous que les arguments que vous transmettez à la méthode ExpectQuery() ou ExpectExec() correspondent aux arguments dans la requête réelle.
  • Vérifiez que les options de configuration SQLMock, telles que QueryMatcherOption, sont définies correctement.
  • Si Si vous rencontrez des incompatibilités intermittentes, essayez d'utiliser une autre option de configuration SQLMock pour l'outil de correspondance de requêtes, telle que sqlmock.QueryMatcherEqual.

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