Rumah > Artikel > pembangunan bahagian belakang > Mengapa Pertanyaan SQLMock Saya Tidak Padan?
Apabila menggunakan SQLMock untuk mengejek pertanyaan, anda mungkin menghadapi situasi di mana pertanyaan yang anda jangkakan untuk dipadankan tidak dipadankan, walaupun muncul sama dalam output log. Artikel ini akan membincangkan sebab biasa untuk ketidakpadanan ini dan menyediakan penyelesaian.
Langkah pertama ialah mengesahkan bahawa pertanyaan anda sememangnya sama dengan pertanyaan yang dijangkakan. Walau bagaimanapun, perbezaan halus dalam pengendalian sintaks atau hujah boleh menyebabkan ketidakpadanan.
Satu isu biasa timbul apabila menggunakan aksara khas dalam pertanyaan. SQLMock mungkin mentafsir aksara ini secara berbeza daripada kod anda. Untuk memastikan padanan yang tepat, anda boleh menggunakan fungsi regexp.QuoteMeta() untuk melepaskan rentetan pertanyaan. Contohnya:
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`))
Ini memastikan bahawa semua aksara khas dianggap sebagai literal, mengelakkan ketidakpadanan.
Anda menyebut bahawa pernyataan pilihan bukan bekerja dengan ExpectExec(). Ini kerana ExpectExec() menjangkakan kemas kini atau penyata sisipan, bukan penyataan pilih. Untuk penyataan pilihan, gunakan ExpectQuery() sebaliknya.
mock.ExpectQuery(`SELECT \* FROM "storage_pools"`). WithArgs(c.givenPool.PoolId).WillReturnResult(sqlmock.NewResult(1, 1))
Atas ialah kandungan terperinci Mengapa Pertanyaan SQLMock Saya Tidak Padan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!