====== 01 - Introducción al Testing ====== El testing de software es el proceso de verificar que una aplicación funcione de acuerdo con los requisitos establecidos y que su comportamiento sea el esperado en diferentes escenarios. No se trata solo de encontrar errores, sino también de aumentar la confianza en la calidad del software y asegurar su mantenibilidad. Objetivos principales del testing: * Detectar y prevenir defectos lo antes posible. * Garantizar la calidad del código y del producto final. * Facilitar el mantenimiento y la evolución del software. * Servir como documentación viva del comportamiento del sistema. ===== Importancia del Testing en Java ===== En proyectos de Java, que suelen ser grandes y de larga duración, el testing cobra un papel esencial. Algunas ventajas clave: * Reducción de costes: un error detectado en producción cuesta mucho más que uno detectado en la fase de desarrollo. * Confianza en el código: permite refactorizar y añadir nuevas funcionalidades sin miedo a romper lo existente. * Automatización: las pruebas pueden ejecutarse de forma automática en cada compilación o despliegue (CI/CD). * Mejores prácticas de desarrollo: promueve un diseño más modular, desacoplado y fácil de probar. ===== Tipos de pruebas más comunes en Java ===== * **Pruebas unitarias**: verifican el comportamiento de una unidad de código (normalmente un método o clase). * **Pruebas de integración**: comprueban la interacción entre distintos módulos del sistema. * **Pruebas de aceptación/funcionales**: validan que el sistema cumple con los requisitos funcionales del cliente. En este curso/noteo nos centraremos especialmente en pruebas unitarias y en cómo hacerlas efectivas. ===== Herramientas principales ===== **JUnit** [[https://junit.org/|JUnit]] es el framework estándar de testing en Java. Con JUnit podremos: * Escribir pruebas unitarias de forma sencilla. * Ejecutar pruebas automáticamente. * Validar resultados mediante aserciones. * Integrarlo con herramientas de construcción (Maven, Gradle) y CI/CD. Actualmente, la versión más utilizada es **JUnit 5 (Jupiter)**, que trae anotaciones modernas como //@Test//, //@BeforeEach//, //@AfterEach//, entre otras. **Mockito** [[https://site.mockito.org/|Mockito]] es el framework más popular de //mocking// en Java. Permite, entre otras cosas: * Crear objetos simulados (mocks) para reemplazar dependencias reales en las pruebas. * Definir comportamientos esperados en esos mocks. * Verificar la interacción entre los objetos de nuestro sistema. Mockito es especialmente útil en pruebas unitarias donde no queremos depender de bases de datos, servicios externos o lógica compleja.