Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pertanyaan SQLMock Saya Tidak Padan?

Mengapa Pertanyaan SQLMock Saya Tidak Padan?

Patricia Arquette
Patricia Arquetteasal
2024-11-10 07:39:02708semak imbas

Why Isn't My SQLMock Query Matching?

Menyelesaikan Masalah Padanan Pertanyaan SQLMock

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.

Mengapa Pertanyaan Tidak Padanan?

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.

Penyelesaian: Regexp.QuoteMeta()

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.

Ketidakpadanan Selang Selang dengan Pernyataan Pilihan

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))

Pertimbangan Tambahan

  • Pastikan hujah yang anda hantar ke kaedah ExpectQuery() atau ExpectExec() sepadan dengan hujah dalam pertanyaan sebenar.
  • Semak bahawa pilihan konfigurasi SQLMock, seperti QueryMatcherOption, ditetapkan dengan betul.
  • Jika anda menghadapi ketidakpadanan yang terputus-putus, cuba gunakan pilihan konfigurasi SQLMock yang berbeza untuk pemadanan pertanyaan, seperti sqlmock.QueryMatcherEqual.

Atas ialah kandungan terperinci Mengapa Pertanyaan SQLMock Saya Tidak Padan?. 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