Rumah > pembangunan bahagian belakang > Golang > Bolehkah Monkey Patching Menyelesaikan Masalah Ujian Asas Kod Go yang Tidak Boleh Diubah?

Bolehkah Monkey Patching Menyelesaikan Masalah Ujian Asas Kod Go yang Tidak Boleh Diubah?

DDD
Lepaskan: 2024-12-15 15:11:18
asal
912 orang telah melayarinya

Can Monkey Patching Solve Go's Unchangeable Code Base Testing Problems?

Monkey Patching in Go: Penyelesaian untuk Pangkalan Kod Tidak Boleh Diubah

Bekerja dengan pangkalan kod yang tidak diprogramkan kepada antara muka dan sangat saling berkaitan boleh hadir cabaran untuk ujian dan penanda aras. Dalam senario sedemikian, teknik mengejek tradisional mungkin tidak boleh digunakan. Walau bagaimanapun, terdapat strategi dalam Go yang boleh membantu: menampal monyet.

Apabila berhadapan dengan situasi yang sama, pendekatan yang dicadangkan melibatkan mencipta antara muka tersuai sebagai pembalut di sekeliling kod yang tidak boleh diubah suai. Ini membolehkan anda mengejek kaedah tertentu dalam ujian sambil membiarkan kod asal tetap utuh.

Untuk menggambarkan, pertimbangkan contoh berikut:

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}

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

Dalam senario ini, Concrete ialah kod yang anda tidak boleh ubah suai . Dengan mencipta antara muka MyInterface dan membenamkan struct Konkrit yang asal, anda memperoleh fleksibiliti untuk mengejek kaedahnya dalam ujian:

// Replace the embedded type with a mock in tests
type MockConcrete struct {
    MyInterface
}

func (m *MockConcrete) DoSomething(i int) error {
    // Implement custom logic for mocking DoSomething
}
Salin selepas log masuk

Pendekatan ini menyediakan cara untuk menguji fungsi tertentu tanpa mengubah suai kod asas.

Sebagai alternatif, seperti yang dicadangkan dalam ulasan, anda juga boleh membenamkan jenis yang diingini secara langsung dan bukannya mencipta antara muka yang berasingan. Ini membolehkan anda secara selektif mengejek kaedah yang anda perlukan sahaja:

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

Strategi ini mengekalkan keupayaan untuk mengakses kaedah tidak dipermainkan secara langsung pada jenis terbenam, memberikan lebih fleksibiliti dalam ujian.

Atas ialah kandungan terperinci Bolehkah Monkey Patching Menyelesaikan Masalah Ujian Asas Kod Go yang Tidak Boleh Diubah?. 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