Rumah >pembangunan bahagian belakang >Golang >Mengapa sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Teks Sama?

Mengapa sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Teks Sama?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 19:00:04675semak imbas

Why Is sqlmock Failing to Match My Query Despite Identical Text?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn