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() }
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 }
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 }
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!