Prueba de constantes en Go
En Go, las constantes son una herramienta valiosa para garantizar la coherencia y corrección del código. Sin embargo, cuando se trata de pruebas unitarias, el uso de constantes puede generar desafíos. Este artículo explora cómo redefinir constantes específicamente con fines de prueba en Go.
El desafío de las constantes
Las constantes en Go son valores inmutables que no se pueden modificar durante la ejecución del programa. Esta inmutabilidad garantiza la integridad del estado del programa y evita cambios accidentales. Sin embargo, durante las pruebas, puede ser necesario modificar constantes temporalmente para probar escenarios específicos.
Un enfoque fácil de realizar pruebas
Considere el siguiente ejemplo:
package main
const baseUrl = "http://google.com"
// in main_test.go
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
...
}))
const baseUrl = ts.URL // Error: const baseUrl already defined
En este ejemplo, queremos usar un servidor de prueba en lugar de llamar a la API remota para realizar pruebas. Para hacer esto, necesitamos redefinir baseUrl con la URL del servidor de prueba. Sin embargo, Go arroja un error porque la baseUrl constante ya está definida. una función adicional:
const baseUrl_ = "http://google.com" func MiFunc() cadena { // Llama a otra función pasando el valor constante devolver miFuncImpl(baseUrl_) } func myFuncImpl (cadena URL base) cadena { // usar URLbase // La misma implementación que estaba en tu función MyFunc() original }
En este código refactorizado, la función MyFunc original delega su implementación a myFuncImpl, que toma un parámetro baseUrl. Esto nos permite llamar a myFuncImpl directamente desde una función de prueba y pasar cualquier URL base deseada.const baseUrl_ = "http://google.com"
func MyFunc() string {
// Call other function passing the const value
return myFuncImpl(baseUrl_)
}
func myFuncImpl(baseUrl string) string {
// use baseUrl
// Same implementation that was in your original MyFunc() function
}
La función MyFunc original permanece segura y no se ve afectada por la refactorización. Siempre pasa la constante baseUrl_ a myFuncImpl, asegurando que el código de producción no tenga un comportamiento inesperado debido a constantes modificadas.
Conclusión
Esta técnica permite a los desarrolladores redefinir constantes para fines de prueba manteniendo la integridad y seguridad del código de producción. Al introducir una función adicional que proporciona la misma funcionalidad que la original, las pruebas pueden modificar constantes sin afectar el comportamiento real del código.
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