Heim >Backend-Entwicklung >Golang >Warum findet Sqlmock trotz identischer Ausgabe im Protokoll keine Übereinstimmung mit meiner Abfrage?

Warum findet Sqlmock trotz identischer Ausgabe im Protokoll keine Übereinstimmung mit meiner Abfrage?

Linda Hamilton
Linda HamiltonOriginal
2024-11-12 16:59:02264Durchsuche

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

Sqlmock stimmt trotz Identität in der Protokollausgabe nicht mit der Abfrage überein

Fehlermeldung

Beim Versuch, eine Abfrage in einem Gorm-Test mit sqlmock abzugleichen, geschieht Folgendes Es ist ein Fehler aufgetreten:

(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"

Lösung

Das Problem besteht aus der Verwendung von regexp als SQLMock-Abfrage-Matcher. Standardmäßig verwendet sqlmock einen Abfrage-Matcher mit strenger Gleichheit, der eine genaue Übereinstimmung zwischen der tatsächlichen Abfrage und dem erwarteten Muster erfordert.

Um dieses Problem zu lösen, verwenden Sie die Option QueryMatcherEqual, um den Standard-Abfrage-Matcher zu ersetzen:

QueryMatcherOption(sqlmock.QueryMatcherEqual)

Zusätzliche Überlegungen

  • Stellen Sie sicher, dass die SQLMock-Abfrage mit der tatsächlichen Abfragezeichenfolge, einschließlich aller Sonderzeichen, übereinstimmt das muss möglicherweise maskiert werden.
  • Wenn die Abfrage Literalwerte enthält, verwenden Sie WithArgs(), um die Argumente anzugeben und sie bei Bedarf zu maskieren.
  • Wenn die Abfrage Funktionen oder komplexe Bedingungen enthält, verwenden Sie regexp.QuoteMeta(), um es in einen regulären Ausdruck umzuwandeln, mit dem sqlmock übereinstimmen kann.

Das obige ist der detaillierte Inhalt vonWarum findet Sqlmock trotz identischer Ausgabe im Protokoll 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