Kaedah Mengejek Panggilan Struktur dalam Kes Ujian Go
Masalah:
Cara mengejek panggilan kaedah bagi struct dalam kes ujian Go tanpa memperkenalkan antara muka dalam sumber kod?
Contoh Kod:
type A struct {} func (a *A) perfom(string){ ... ... .. } var s := A{} func invoke(url string){ out := s.perfom(url) ... ... }
Jawapan:
Untuk mengejek panggilan kaedah bagi struct, satu pendekatan ialah menggunakan objek olok-olok.
Penyelesaian dengan Mock Objek:
Contoh Kod:
type Performer interface { perform() } type A struct {} func (a *A) perform() { fmt.Println("real method") } type AMock struct {} func (a *AMock) perform () { fmt.Println("mocked method") } func caller(p Performer) { p.perform() }
Dalam kes ujian, suntikan pelaksanaan olok-olok ke dalam fungsi invoke:
func TestCallerMock(t *testing.T) { mock := &AMock{} caller(mock) }
Dalam kod sebenar, masukkan pelaksanaan sebenar ke dalam fungsi invoke:
func RealInvoke(url string) { a := &A{} out := a.perform(url) }
Atas ialah kandungan terperinci Bagaimana untuk Mengolok-olok Panggilan Kaedah Struktur dalam Ujian Go Tanpa Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!