Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengejek Fungsi dengan Berkesan di Golang?

Bagaimanakah Saya Boleh Mengejek Fungsi dengan Berkesan di Golang?

Linda Hamilton
Lepaskan: 2024-12-07 07:51:17
asal
545 orang telah melayarinya

How Can I Effectively Mock Functions in Golang?

Fungsi Mengejek di Golang

Di Golang, fungsi mengejek yang diisytiharkan pada jenis konkrit tidak disokong secara langsung. Walau bagaimanapun, terdapat beberapa strategi untuk mencapai kefungsian yang serupa.

Nilai Fungsi

Nilai fungsi, termasuk pembolehubah, medan struct atau parameter, boleh dipermainkan. Pertimbangkan perkara berikut:

var Fn = func() { ... }

type S struct {
    Fn func()
}

func F(Fn func())
Salin selepas log masuk

Fn dalam semua keadaan ini boleh dipermainkan.

Antaramuka

Antara muka mengejek ialah pilihan pilihan. Cipta antara muka yang mewakili kaedah fungsi sasaran anda:

type ProductRepository interface {
    GetProductById(DB *sql.DB, ID int) (p Product, err error)
}
Salin selepas log masuk

Laksanakan versi nyata dan tiruan antara muka ini:

// Real implementation
type ProductStore struct{}

func (ProductStore) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}

// Mock implementation
type ProductRepositoryMock struct {}

func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}
Salin selepas log masuk

Kod yang bergantung pada ProductRepository kini boleh dihantar pelaksanaan sebenar untuk kegunaan pengeluaran dan pelaksanaan olok-olok untuk ujian.

Antaramuka Meniru

Sebagai alternatif, tentukan antara muka yang meniru kaedah *sql.DB, kemudian gunakan jenis antara muka itu sebagai jenis parameter untuk fungsi anda:

type DBIface interface {
    Query(query string, args ...interface{}) (*sql.Rows, error)
    // ...
}

type DBMock struct {}

func (DBMock) Query(query string, args ...interface{}) (*sql.Rows, error) {
    // ...
}

func GetProductByName(DB DBIface, name string) (p Product, err error) {
    // ...
}
Salin selepas log masuk

Ini menjadikan Parameter DB boleh diejek.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Fungsi dengan Berkesan di Golang?. 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