Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengolok-olok Panggilan Kaedah Struktur dalam Ujian Go Tanpa Antara Muka?

Bagaimana untuk Mengolok-olok Panggilan Kaedah Struktur dalam Ujian Go Tanpa Antara Muka?

Susan Sarandon
Lepaskan: 2024-12-09 18:57:26
asal
399 orang telah melayarinya

How to Mock Struct Method Calls in Go Tests Without Interfaces?

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

Jawapan:

Untuk mengejek panggilan kaedah bagi struct, satu pendekatan ialah menggunakan objek olok-olok.

Penyelesaian dengan Mock Objek:

  1. Buat antara muka Performer yang mentakrifkan kaedah untuk dipermainkan.
  2. Buat pelaksanaan sebenar antara muka Performer.
  3. Buat a pelaksanaan olok-olok AMock antara muka Performer.
  4. Haruskan pelaksanaan olok-olok kepada gunakan fungsi dalam kes ujian.

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

Dalam kes ujian, suntikan pelaksanaan olok-olok ke dalam fungsi invoke:

func TestCallerMock(t *testing.T) {
    mock := &AMock{}
    caller(mock)
}
Salin selepas log masuk

Dalam kod sebenar, masukkan pelaksanaan sebenar ke dalam fungsi invoke:

func RealInvoke(url string) {
    a := &A{}
    out := a.perform(url)
}
Salin selepas log masuk

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!

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