Heim  >  Artikel  >  Backend-Entwicklung  >  Warum stimmt mein SQLMock trotz identischer Eingabe und Protokollausgabe nicht mit meiner Abfrage überein?

Warum stimmt mein SQLMock trotz identischer Eingabe und Protokollausgabe nicht mit meiner Abfrage überein?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-11 00:57:03748Durchsuche

Why Is My Sqlmock Not Matching My Query Despite Identical Input and Log Output?

Sqlmock stimmt trotz identischer Eingabe und Protokollausgabe nicht mit der Abfrage überein

Problem mit Abfragekonflikten

Beim Versuch, Tests für eine Gorm-Funktion mit sqlmock zu schreiben, haben Sie Möglicherweise tritt ein Problem auf, bei dem sqlmock nicht mit Ihrer SQL-Abfrage übereinstimmt, obwohl in der Protokollausgabe identische Abfragen angezeigt werden. Diese Nichtübereinstimmung kann bei Verwendung der ExpectQuery-Methode auftreten.

Lösung

Um dieses Problem zu beheben, wird empfohlen, regexp.QuoteMeta() zu verwenden, um Ihre Abfrage zu maskieren, bevor Sie sie an die ExpectQuery-Methode übergeben. Diese Funktion maskiert ordnungsgemäß alle Sonderzeichen, die die Nichtübereinstimmung verursachen könnten. Der aktualisierte Code würde so aussehen:

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

Problem bei der Ausführungskonflikt

Möglicherweise stoßen Sie auch auf ein anderes Problem, bei dem sqlmock nicht mit Ihrer SELECT-Anweisung übereinstimmt. Dies liegt daran, dass Gorm aus irgendeinem Grund mehrere SELECT-Anweisungen ausführt. Die erste Anweisung findet die Zeile, die zweite Anweisung jedoch nicht.

Um dieses Problem zu beheben, können Sie QueryMatcherOption(sqlmock.QueryMatcherEqual) in Verbindung mit ExpectQuery verwenden, um sqlmock zu zwingen, statt dessen die exakte Zeichenfolgenübereinstimmung zu verwenden Standard-Fuzzier-Matching-Algorithmus.

db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
if err != nil {
    t.Fatal(err)
}

Das obige ist der detaillierte Inhalt vonWarum stimmt mein SQLMock trotz identischer Eingabe und Protokollausgabe nicht mit meiner Abfrage ü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