Testeo Unitario de Funciones con MOOC en Go
Clase 21 de 30 • Curso de Go Intermedio: Programación Orientada a Objetos y Concurrencia
Resumen
¿Cómo implementar MOOC Functions para pruebas unitarias?
El arte de realizar pruebas unitarias nos permite validar que nuestro código esté funcionando correctamente y de manera eficiente, incluso cuando depende de otras funciones. Implementar MOOC Functions es una técnica poderosa que nos ayuda particularmente en este contexto. Aprenderemos cómo usar esta técnica de manera efectiva.
¿Qué son las MOOC Functions y por qué son útiles?
Las MOOC (Mock) Functions son versiones simuladas de funciones reales que nos permiten probar unidades de código en aislamiento. Al usarlas, podemos:
- Simular comportamientos complejos: Sin necesidad de depender de funciones que podrían ser costosas o difíciles de ejecutar en un entorno de prueba.
- Asegurar que las funciones principales están aisladas: Garantizando que la lógica principal se ejecuta correctamente sin interferencias.
- Facilitar la detección de errores: Permitiendo cambios controlados en las respuestas de las funciones para verificar que se manejen adecuadamente los casos erróneos.
¿Cómo crear y utilizar las MOOC Functions en Go?
Paso 1: Definición de estructuras y valores de prueba
Primero, definimos nuestras estructuras y casos de prueba:
func main() {
expectedEmployee := FullTimeEmployee{
Person: Person{Age: 35, DNI: "1", Name: "Jungleu"},
ID: "1",
Position: "CEO",
}
}
Este bloque define un empleado con parámetros que utilizaremos en nuestras pruebas.
Paso 2: Almacenamiento y sustitución de funciones originales
Para modificar funciones adecuadamente sin perder sus versiones originales, las almacenamos:
originalGetEmployeeByID := getEmployeeByID
originalGetPersonByID := getPersonByID
Luego, reemplazamos las funciones originales con las Mooc Functions.
Paso 3: Uso de rangos y comparación de resultados
Iteramos sobre nuestra tabla de casos de prueba y evaluamos:
for _, test := range tests {
ft, err := getFullTimeEmployeeByID(test.ID, test.DNI)
if err != nil {
log.Println("Error when getting employee:", err)
}
if ft.Person.Age != expectedEmployee.Person.Age {
log.Printf("Expected age %d but got %d", expectedEmployee.Person.Age, ft.Person.Age)
}
}
Es vital comparar propiedad por propiedad, siempre retornando las funciones originales al finalizar.
¿Cómo ejecutar y validar los resultados de las pruebas?
Utilizamos comandos específicos para ejecutar pruebas y verificar resultados. Con go test
, podemos comprobar si nuestras pruebas pasan correctamente:
go test
Si unes estos conceptos con un enfoque meticuloso al almacenar y restaurar funciones, tu experiencia probando funciones complejas se enriquecerá notablemente.
Reflexiones finales y mejores prácticas
- Fijar valores originales: Siempre mantén los valores originales de las funciones antes de hacer mocs.
- Prueba cambios específicos: Experimenta cambiando valores de prueba para garantizar que las condiciones bajo prueba se comporten como se espera.
- Frecuencia en las pruebas: Realiza pruebas de forma regular para captar errores de manera temprana y frecuente en el desarrollo.
Este conocimiento no solo te dará confianza en la funcionalidad de tu código, sino que también mejorará tu eficiencia en el desarrollo de software, ¡motivo por el que continúes sumergiéndote en este fascinante mundo de las pruebas unitarias!