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