Monkey Patching in Go: Una solución para bases de código no cambiables
trabajando con bases de código que no están programadas para interfaces e interfaces muy interconectadas pueden presentar desafíos para las pruebas y el benchmarking. En tales escenarios, las técnicas de burla tradicional pueden no ser aplicables. Sin embargo, hay una estrategia en GO que puede ayudar: Patching de mono.
Cuando se enfrenta a una situación similar, el enfoque sugerido implica crear una interfaz personalizada como un envoltorio alrededor del código no modificable. Esto le permite burlarse de los métodos específicos en las pruebas mientras deja el código original intacto.
para ilustrar, considere el siguiente ejemplo:
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() }
En este escenario, concreto es el código que no puede modificar. Al crear la interfaz MyInterface e incrustar la estructura de concreto original, obtiene la flexibilidad para burlarse de sus métodos en las pruebas:
// 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 }
Este enfoque proporciona una forma de probar una funcionalidad específica sin modificar el código subyacente.
alternativamente, como se sugiere en los comentarios, también puede incrustar el tipo deseado directamente en lugar de crear una interfaz separada. Esto le permite burlarse selectivamente solo los métodos que necesita:
type Concrete struct { *somepackage.Client }
Esta estrategia conserva la capacidad de acceder a métodos no burlados directamente en el tipo integrado, proporcionando una mayor flexibilidad en las pruebas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3