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.
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.
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.
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))
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!