Dalam aplikasi Go, terdapat fungsi getter yang ditakrifkan dalam fail berasingan untuk perkhidmatan yang berbeza. Setiap fungsi mengambil sambungan pangkalan data dan parameter SQL sebagai input, dan mengembalikan data berstruktur atau ralat. Isu timbul apabila cuba mengejek fungsi ini daripada pakej utama.
Kaedah 1: Nilai Fungsi Mengejek
In Go, ia tidak mungkin untuk mengejek fungsi secara langsung. Walau bagaimanapun, anda boleh mengejek nilai fungsi, yang termasuk pembolehubah, medan pada struct dan parameter fungsi. Untuk melakukan ini, takrifkan fungsi sebagai pembolehubah atau hantarkannya sebagai parameter kepada fungsi lain.
Kaedah 2: Menggunakan Antara Muka
Pendekatan pilihan adalah dengan mengejek antara muka . Tentukan antara muka yang mewakili kefungsian fungsi getter dan laksanakan versi nyata dan olok-olok antara muka tersebut. Ini membolehkan anda menyuntik pelaksanaan olok-olok semasa ujian.
Kaedah 3: Sambungan Pangkalan Data Mengejek
Jika fungsi getter bergantung pada sambungan pangkalan data, anda boleh mengejek pangkalan data jenis sambungan sebaliknya. Tentukan antara muka yang meniru kaedah sambungan pangkalan data sebenar dan laksanakan versi olok-olok. Ini membolehkan anda menghantar sambungan olok-olok kepada fungsi getter semasa ujian.
type ProductRepository interface { GetProductById(db DBIface, ID int) (p Product, err error) } type ProductStore struct{} func (ProductStore) GetProductById(db DBIface, ID int) (p Product, err error) { // Your original implementation } type ProductRepositoryMock struct{} func (ProductRepositoryMock) GetProductById(DB DBIface, ID int) (p Product, err error) { // Mock implementation }
Dalam contoh ini, antara muka ProductRepository mentakrifkan fungsi GetProductById. Struktur ProductStore melaksanakan antara muka menggunakan sambungan pangkalan data sebenar. Struktur ProductRepositoryMock menyediakan pelaksanaan olok-olok untuk ujian.
Dengan menggunakan antara muka atau nilai fungsi olok-olok, anda boleh mencapai ejekan dalam Go tanpa mengubah suai pengisytiharan fungsi asal, menjadikan ujian dan pengasingan lebih mudah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Fungsi dengan Berkesan dalam Go untuk Ujian Unit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!