Rumah >pembangunan bahagian belakang >Golang >Mengapa Sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Output Sama dalam Log?

Mengapa Sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Output Sama dalam Log?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 16:59:02264semak imbas

Why is Sqlmock Failing to Match My Query Despite Identical Output in the Log?

Sqlmock Tidak Padan Pertanyaan Walaupun Identiti dalam Output Log

Mesej Ralat

Apabila cuba memadankan pertanyaan dalam ujian Gorm menggunakan sqlmock, perkara berikut ralat ditemui:

(path/to/my/project/database.go:263)
[2020-01-08 10:29:40]  Query: 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"

Penyelesaian

Isu ini berpunca daripada penggunaan regexp sebagai pemadan pertanyaan sqlmock. Secara lalai, sqlmock menggunakan pemadanan pertanyaan kesamaan yang ketat, yang memerlukan padanan tepat antara pertanyaan sebenar dan corak yang dijangkakan.

Untuk menyelesaikannya, gunakan pilihan QueryMatcherEqual untuk menggantikan pemadan pertanyaan lalai:

QueryMatcherOption(sqlmock.QueryMatcherEqual)

Pertimbangan Tambahan

  • Pastikan pertanyaan sqlmock sepadan dengan rentetan pertanyaan sebenar, termasuk mana-mana aksara khas yang mungkin perlu dilepaskan.
  • Jika pertanyaan termasuk nilai literal , gunakan WithArgs() untuk menentukan argumen dan melarikannya seperti yang diperlukan.
  • Jika pertanyaan termasuk fungsi atau keadaan kompleks, gunakan regexp.QuoteMeta() untuk menukarnya kepada ungkapan biasa yang boleh dipadankan oleh sqlmock.

Atas ialah kandungan terperinci Mengapa Sqlmock Gagal Memadankan Pertanyaan Saya Walaupun Output Sama dalam Log?. 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