Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengejek Fungsi dengan Berkesan dalam Go untuk Ujian Unit?

Bagaimanakah Saya Boleh Mengejek Fungsi dengan Berkesan dalam Go untuk Ujian Unit?

Barbara Streisand
Lepaskan: 2024-12-27 22:06:14
asal
425 orang telah melayarinya

How Can I Effectively Mock Functions in Go for Unit Testing?

Cara Mengejek Fungsi di Golang

Masalah:

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.

Penyelesaian:

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.

Contoh:

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan