Heim > Artikel > Backend-Entwicklung > Warum findet „sqlmock“ keine Übereinstimmung mit einer Abfrage, obwohl die Abfragen identisch sind und die Protokolle zeigen, dass sie gleich sind?
sqlmock stimmt nicht mit der Abfrage überein, aber die Abfrage ist dieselbe und die Protokollausgabe zeigt dasselbe.
Beim Schreiben des Tests ist ein Problem aufgetreten Code mit Gorm und sqlmock, hauptsächlich im Zusammenhang mit der Update-Funktion.
Der erste Workflow-Abschnitt fragt nur Datensätze aus der Datenbank ab. Auch wenn die Protokollausgabe zeigt, dass sie gleich sind, kann ich sie nicht mit meinem SQL-Code abgleichen.
Die Fehlermeldung lautet wie folgt:
(database.go:263) [2020-01-08 10:29:40] 查询:无法匹配实际 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"
Ich habe auch versucht, ExpectExec zum Einfügen von ExpectQuery zu verwenden.
for _, c := range cases { db, mock, err := sqlmock.New() if err != nil { t.Fatal(err) } DB, err := gorm.Open("sqlite3", db) if err != nil { t.Fatal(err) } DB.LogMode(true) mock.ExpectQuery(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`) err = UpdateStoragePool(DB, &c.givenPool) if !reflect.DeepEqual(c.wantedError, err) { t.Fatalf("expecting errror %q, got %q", c.wantedError, err) } // 如果事务期间没有发生任何错误,则检查是否满足所有预期 if c.wantedError == nil { if err := mock.ExpectationsWereMet(); err != nil { t.Fatalf(err.Error()) } } }
Ich habe es auch versucht:
mock.ExpectQuery(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = '1')) ORDER BY "storage_pools"."id" ASC LIMIT 1`).WithArgs(1) mock.ExpectExec(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`) mock.ExpectExec(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = '1')) ORDER BY "storage_pools"."id" ASC LIMIT 1`).WithArgs(1)
Es kann zwei mögliche Gründe für dieses Problem geben:
Das obige ist der detaillierte Inhalt vonWarum findet „sqlmock“ keine Übereinstimmung mit einer Abfrage, obwohl die Abfragen identisch sind und die Protokolle zeigen, dass sie gleich sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!