Rumah >pembangunan bahagian belakang >Golang >Mengapa sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Teks Sama?
sqlmock Tidak Padan dengan Pertanyaan, Walaupun Teks Sama
Menghadapi mesej ralat:
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"
semasa menggunakan sqlmock dengan Gorm boleh mengecewakan. Walaupun output log menunjukkan pertanyaan yang sama, pemadanan gagal.
Isu asas di sini ialah perbezaan antara teks SQL dan sintaks SQL. Walaupun teks pertanyaan mungkin kelihatan sama, variasi sintaksis yang kecil boleh menyebabkan isu. Untuk menyelesaikan masalah ini, pastikan rentetan pertanyaan yang dijangkakan dalam olok-olok anda sepadan dengan teks literal pertanyaan yang dilaksanakan.
Satu penyelesaian yang mungkin adalah menggunakan fungsi regexp.QuoteMeta() untuk melepaskan sebarang aksara meta dalam pertanyaan yang dijangkakan :
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`))
Dengan melampirkan teks pertanyaan dalam petikan literal, regexp.QuoteMeta() memastikan bahawa sebarang aksara khas atau metakarakter dalam rentetan diperlakukan secara literal, menghalangnya daripada mengganggu proses pemadanan. Ini sepatutnya menyelesaikan isu dan membenarkan sqlmock memadankan pertanyaan dengan betul.
Atas ialah kandungan terperinci Mengapa sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Teks Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!