Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Penampalan Monyet dalam Go Menyelesaikan Cabaran Pengujian Kod Warisan?
Tampalan Monyet dalam Go: Penyelesaian untuk Menguji Kod Warisan
Walaupun pergantungan Go pada antara muka memudahkan ejekan, situasi mungkin timbul di mana anda perlu untuk menguji kod tanpa mengubahnya. Jika kod itu tidak distrukturkan untuk menggunakan antara muka dan sangat saling berkaitan, teknik ejekan tradisional mungkin terbukti mencabar.
Nasib baik, Go menawarkan penyelesaian kepada masalah ini: tampalan monyet. Teknik ini membolehkan anda mengubah suai objek semasa runtime. Untuk melaksanakannya, cipta antara muka yang membungkus struct asal yang anda mahu ejek:
type MyInterface interface { DoSomething(i int) error DoSomethingElse() ([]int, error) }
Seterusnya, benamkan struct asal dalam struct Konkrit anda dan laksanakan kaedah antara muka anda dalam struct Konkrit:
type Concrete struct { *somepackage.Client } func (c *Concrete) DoSomething(i int) error { return c.client.DoSomething(i) } func (c *Concrete) DoSomethingElse() ([]int, error) { return c.client.DoSomethingElse() }
Kod yang diubah suai ini membolehkan anda mengejek jenis Konkrit dengan cara yang sama seperti anda mengejek jenis Klien, menyediakan penyelesaian untuk menguji kod tanpa memerlukan perubahan pada pangkalan kod asal.
Atas ialah kandungan terperinci Bagaimanakah Penampalan Monyet dalam Go Menyelesaikan Cabaran Pengujian Kod Warisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!