Heim  >  Artikel  >  Backend-Entwicklung  >  Warum stimmt meine SQLMock-Abfrage nicht überein?

Warum stimmt meine SQLMock-Abfrage nicht überein?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-10 07:39:02705Durchsuche

Why Isn't My SQLMock Query Matching?

Fehlerbehebung bei SQLMock-Abfrageübereinstimmungsproblemen

Wenn Sie SQLMock zum Verspotten von Abfragen verwenden, kann es zu Situationen kommen, in denen die erwartete Übereinstimmung nicht mit der Abfrage übereinstimmt, obwohl sie angezeigt wird identisch in der Protokollausgabe. In diesem Artikel werden häufige Gründe für diese Nichtübereinstimmung erläutert und Lösungen bereitgestellt.

Warum erfolgt keine Abfrageübereinstimmung?

Der erste Schritt besteht darin, zu überprüfen, ob Ihre Abfrage tatsächlich mit der erwarteten Abfrage identisch ist. Allerdings können subtile Unterschiede in der Syntax oder der Argumentverarbeitung zu Nichtübereinstimmungen führen.

Lösung: Regexp.QuoteMeta()

Ein häufiges Problem tritt bei der Verwendung von Sonderzeichen in der Abfrage auf. SQLMock interpretiert diese Zeichen möglicherweise anders als Ihr Code. Um eine genaue Übereinstimmung sicherzustellen, können Sie die Funktion regexp.QuoteMeta() verwenden, um die Abfragezeichenfolge zu maskieren. Zum Beispiel:

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

Dadurch wird sichergestellt, dass alle Sonderzeichen als Literale behandelt werden, wodurch Nichtübereinstimmungen vermieden werden.

Zeitweilige Nichtübereinstimmungen mit Select-Anweisungen

Sie haben erwähnt, dass dies bei Select-Anweisungen nicht der Fall ist Arbeiten mit ExpectExec(). Dies liegt daran, dass ExpectExec() eine Update- oder Insert-Anweisung und keine Select-Anweisung erwartet. Verwenden Sie für Select-Anweisungen stattdessen ExpectQuery().

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

Zusätzliche Überlegungen

  • Stellen Sie sicher, dass die Argumente, die Sie an die ExpectQuery()- oder ExpectExec()-Methode übergeben, mit den Argumenten übereinstimmen in der eigentlichen Abfrage.
  • Überprüfen Sie, ob die SQLMock-Konfigurationsoptionen, wie z. B. QueryMatcherOption, richtig eingestellt sind.
  • Wenn Sie gelegentlich auf Nichtübereinstimmungen stoßen, versuchen Sie es mit einer anderen SQLMock-Konfigurationsoption für den Abfrage-Matcher. wie sqlmock.QueryMatcherEqual.

Das obige ist der detaillierte Inhalt vonWarum stimmt meine SQLMock-Abfrage nicht überein?. 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