Heim  >  Artikel  >  Backend-Entwicklung  >  Warum findet sqlmock trotz identischem Text keine Übereinstimmung mit meiner Abfrage?

Warum findet sqlmock trotz identischem Text keine Übereinstimmung mit meiner Abfrage?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-10 19:00:04585Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn