Heim > Artikel > Backend-Entwicklung > Warum findet sqlmock trotz identischem Text keine Übereinstimmung mit meiner Abfrage?
sqlmock stimmt trotz identischem Text nicht mit der Abfrage überein
Fehlermeldung:
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"
bei der Verwendung von sqlmock mit Gorm kann frustrierend sein. Obwohl die Protokollausgabe identische Abfragen anzeigt, schlägt der Abgleich fehl.
Das zugrunde liegende Problem ist hier der Unterschied zwischen SQL-Text und SQL-Syntax. Obwohl der Abfragetext möglicherweise identisch erscheint, können kleine syntaktische Abweichungen zu Problemen führen. Um dieses Problem zu beheben, stellen Sie sicher, dass die erwartete Abfragezeichenfolge in Ihrem Mock mit dem Literaltext der ausgeführten Abfrage übereinstimmt.
Eine mögliche Lösung besteht darin, die Funktion regexp.QuoteMeta() zu verwenden, um alle Metazeichen in der erwarteten Abfrage zu maskieren :
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`))
Durch das Einschließen des Abfragetexts in wörtliche Anführungszeichen stellt regexp.QuoteMeta() sicher, dass alle Sonderzeichen oder Metazeichen innerhalb der Zeichenfolge wörtlich behandelt werden, sodass sie den Abgleichsprozess nicht beeinträchtigen. Dies sollte das Problem beheben und es sqlmock ermöglichen, die Abfrage korrekt abzugleichen.
Das obige ist der detaillierte Inhalt vonWarum findet sqlmock trotz identischem Text keine Übereinstimmung mit meiner Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!