Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengejek Kod Go yang Tidak Boleh diubah suai untuk Ujian?

Bagaimanakah Saya Boleh Mengejek Kod Go yang Tidak Boleh diubah suai untuk Ujian?

DDD
Lepaskan: 2024-12-09 17:31:17
asal
461 orang telah melayarinya

How Can I Mock Unmodifiable Go Code for Testing?

Tampalan Monyet Golang untuk Kod Tidak Boleh Diubahsuai

Dalam Go, ketiadaan pengubahsuaian objek masa jalan menimbulkan cabaran untuk menguji kod yang saling berkaitan yang tidak mempunyai pergantungan suntikan atau pengaturcaraan antara muka. Untuk mengatasi pengehadan ini, pertimbangkan untuk menggunakan pendekatan berikut:

Mencipta Antara Muka Pembalut Mengejek

Tentukan antara muka anda sendiri yang membungkus struktur asal. Contohnya:

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}
Salin selepas log masuk

Menggunakan Struktur Penyesuai

Laksanakan antara muka pembalut dalam struct baharu yang menyesuaikan pelaksanaan struct asal:

type Concrete struct {
    client *somepackage.Client
}

func (c *Concrete) DoSomething(i int) error {
    return c.client.DoSomething(i)
}

func (c *Concrete) DoSomethingElse() ([]int, error) {
    return c.client.DoSomethingElse()
}
Salin selepas log masuk

Menguji dengan Pembungkus

Anda kini boleh mengejek struct Konkrit dalam ujian unit kerana ia mematuhi antara muka:

// Mock Concrete
mock := &MockMyInterface{}
c := Concrete{mock}

// Call mock method
err := c.DoSomething(10)
Salin selepas log masuk

Membenamkan Jenis Asal

Seperti yang dicadangkan oleh @elithrar, anda juga boleh benamkan jenis asal untuk mengejek secara selektif kaedah yang diperlukan sahaja:

type Concrete struct {
    *somepackage.Client
}
Salin selepas log masuk

Dalam kes ini, anda masih boleh akses pelaksanaan asal kaedah yang tidak memerlukan ejekan:

c := Concrete{&somepackage.Client{}}
c.DoSomethingNotNeedingMocking() // Calls the original implementation
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Kod Go yang Tidak Boleh diubah suai untuk Ujian?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan