Prueba automática
Código que comprueba que otro código hace lo que debe y avisa si deja de hacerlo.
Una prueba automática llama a una parte de tu programa con unos datos conocidos y comprueba que el resultado es el esperado, por ejemplo, que sumar(2, 3) devuelve 5. Se ejecutan todas con una sola orden y dicen cuáles fallan.
Su gran ventaja aparece al cambiar el código: si rompes algo sin darte cuenta, una prueba falla en el momento, antes de que lo note nadie. Cada lenguaje tiene su herramienta: unittest o pytest en Python, JUnit en Java, cargo test en Rust o go test en Go.
Un ejemplo
En Python, self.assertEqual(precio_final(80, 25), 60) falla si la función de descuentos deja de calcular bien.
Por qué importa
Una prueba automática es código que comprueba que otro código funciona como esperas, y que puedes ejecutar tantas veces como quieras en segundos. Sin ellas, cada cambio te obliga a probar a mano todo lo que pudiera verse afectado, y tarde o temprano algo se rompe sin que lo notes. Con ellas, tienes una red de seguridad: si modificas una función y rompes otra, la prueba falla y lo sabes de inmediato.
Hay varios niveles. Las pruebas unitarias comprueban piezas pequeñas, como una función, de forma aislada. Las de integración verifican que varias piezas funcionan juntas, por ejemplo tu código con la base de datos. Las de extremo a extremo simulan a un usuario real usando la aplicación completa. Existen herramientas en cada lenguaje, como pytest en Python, JUnit en Java o Jest y Vitest en JavaScript, y se suelen ejecutar automáticamente en cada cambio mediante integración continua.
Confusiones frecuentes
Se piensa que probar manualmente una vez es suficiente, o que tener pruebas garantiza que no hay fallos. Lo primero no escala y lo segundo es falso: solo detectan lo que alguien pensó en comprobar, y una buena cobertura no equivale a un buen conjunto de pruebas. También se confunden los niveles: una prueba unitaria no debería depender de la red ni de una base de datos real, o se vuelve lenta y frágil. Otro error de principiante es escribir pruebas que repiten la implementación en vez de describir el comportamiento esperado, y se rompen ante cualquier refactorización.
Preguntas frecuentes
¿Cómo es una prueba sencilla?
Por ejemplo, en Python con pytest: def test_suma(): assert suma(2, 3) == 5. Llamas a la función con una entrada conocida y compruebas el resultado esperado.
¿Qué es TDD?
Desarrollo guiado por pruebas: primero escribes una prueba que falla, luego el código mínimo para que pase y después lo mejoras. Es una técnica, no una obligación.
Fuentes consultadas
- unittest: framework de pruebas unitarias (Documentación de Python)
- Pruebas en .NET (Microsoft Learn)