Una prueba es un fragmento de código que compara el comportamiento real de la aplicación con el comportamiento esperado. Las pruebas automáticas se ejecutan sin intervención humana y permiten cambiar el código con confianza.
Una prueba que se ejecuta y pasa no garantiza la ausencia de errores; garantiza que el comportamiento probado funciona.
| Tipo | Cómo se ejecuta | Cuándo |
|---|---|---|
| Manual | Una persona interactúa con la aplicación | Exploración, comprobación puntual |
| Automática | El propio código de prueba se ejecuta en cada build | Regresión, validación continua |
Las automáticas son la base del desarrollo moderno: se ejecutan miles de veces, en cada cambio, de forma idéntica.
| Tipo | Qué comprueba | Ejemplo |
|---|---|---|
| Unitarias | Una unidad de código aislada (clase, método) | Que un método calcula el total con descuento |
| Integración | Que varias piezas colaboran correctamente | Que el service consulta el repository y devuelve el dato |
| Arquitectura | Que el código respeta las reglas estructurales | Que la capa controller no depende de persistence |
| E2E | El sistema completo, desde la interfaz, como un usuario | Registrar un usuario y ver su perfil en la aplicación real |
| Nivel | Cantidad | Velocidad | Coste |
|---|---|---|---|
| Unitarias | Muchas | Milisegundos | Bajo |
| Integración | Menos | Segundos | Medio |
| E2E | Pocas | Minutos | Alto |
Cuanto más alto el nivel, más realista pero más lento y frágil. Por eso la base de la pirámide es ancha: la mayor parte del comportamiento se protege con unitarias rápidas, y los E2E cubren solo los flujos críticos.