Este repositorio es un ecosistema de aprendizaje y desarrollo en Java. Contiene implementaciones de algoritmos clásicos, gestión de lógica de negocio y pruebas de integración, sirviendo como base sólida para despliegue de componentes escalables.
- ✅ Búsqueda Inteligente: Filtro de películas por nombre (parcial y case-insensitive).
- ✅ Gestión de Catálogo: Búsqueda avanzada por género y director.
- ✅ Persistencia Robusta: Repositorio implementado con
JdbcTemplatey soporte para bases de datos SQL. - ✅ Calidad de Código: Cobertura de pruebas unitarias con Mockito e integración con base de datos H2.
El proyecto implementa TDD (Test Driven Development) y asegura la calidad mediante los siguientes módulos:
| Componente | Clase | Casos de Prueba | Core |
|---|---|---|---|
| Validación de Passwords | PasswordUtil |
Niveles de seguridad y longitud. | JUnit 5 |
| Fechas Bisiestas | DateUtil |
Lógica de divisibilidad 4/100/400. | JUnit 5 |
| Números Romanos | RomanNumerals |
Conversión y casos sustractivos (IV, IX). | JUnit 5 |
| Procesador de Pagos | PaymentProcessor |
Simulación de pasarelas con Mocks. | Mockito |
| Algoritmos Clásicos | FizzBuzz |
Divisibilidad múltiple y lógica condicional. | JUnit 5 |
| Cálculo de Precios | PriceCalculator |
Acumulación y descuentos porcentuales. | JUnit 5 |
| Lógica de Strings | StringUtil |
Manipulación, repetición y manejo de null. |
JUnit 5 |
| Buscador de Cine | MovieService |
Filtrado por nombre, género y director. | Mockito |
| Persistencia SQL | MovieRepository |
Pruebas de integración con scripts H2. | Spring JDBC |
| Seguridad | PasswordUtil |
Niveles de seguridad y longitud de claves. | JUnit 5 |
Para asegurar la robustez del sistema, empleamos una pirámide de pruebas equilibrada:
- Unit Tests (JUnit 5): Validamos la lógica pura de algoritmos y utilidades en aislamiento total.
- Doubles & Mocks (Mockito): Aislamos las dependencias externas (servicios, repositorios) para probar el comportamiento de la capa de negocio sin efectos colaterales.
- Integration Tests (H2 Database): Verificamos la comunicación real con la base de datos, ejecutando scripts SQL (
test-data.sql) en entornos de memoria controlados.
- Lenguaje: Java 25 (utilizando las últimas funciones de la JVM).
- Build Tool: Maven 3.5.4+.
- Testing: JUnit 5 (Jupiter) & Mockito 5.
- IDE:
IntelliJ IDEA 2025.2.5.
- Clonar y navegar:
git clone https://github.com/luiscacuango2/JavaTest.git cd javatest - Ciclo de vida de Maven:
mvn clean package # Compilar y empaquetar mvn test # Ejecutar suite de pruebas unitarias
- Ejecutar la aplicación
java -jar target/javatest-1.0-SNAPSHOT.jar
Nota técnica (Java 25): Para evitar advertencias de carga dinámica durante los tests, el proyecto está configurado para habilitar
-XX:+EnableDynamicAgentLoadingen el entorno de pruebas.
El proyecto sigue una arquitectura modular y por capas (Interfaz, Negocio y Datos), organizada de la siguiente manera:
javatest/
├── src/
│ ├── main/
│ │ ├── java/com/luigi/javatest/
│ │ │ ├── discounts/ # Lógica para gestión de descuentos
│ │ │ ├── movies/ # Dominio principal de Películas
│ │ │ │ ├── data/ # Capa de Datos (Repositorios con JdbcTemplate)
│ │ │ │ ├── model/ # Entidades y modelos de datos (POJOs)
│ │ │ │ └── service/ # Capa de Negocio (Lógica de filtrado y búsqueda)
│ │ │ ├── payments/ # Simulación de pasarela de pagos
│ │ │ ├── player/ # Lógica del reproductor
│ │ │ └── util/ # Clases de utilidad generales
│ │ └── resources/
│ │ └── sql-scripts/ # Scripts SQL para inicialización y pruebas
│ │ └── test-data.sql
│ └── test/
│ └── java/com/luigi/javatest/ # Espejo de src/main para pruebas unitarias e integración
├── pom.xml # Configuración de Maven y dependencias
└── README.md # Documentación del proyecto
-
org.mockito:mockito-core:5.21.0 (scope:
test) Biblioteca principal para crear mocks y stubs en pruebas. Se utiliza junto con mockito-junit-jupiter (5.21.0) para una integración fluida con JUnit 5. Nota técnica: Para Java 25+, se ha configurado eljavaagenty la flag-XX:+EnableDynamicAgentLoadingen elmaven-surefire-pluginpara permitir la carga dinámica de Mockito. -
org.junit.jupiter:junit-jupiter:5.13.4 (scope:
test) JUnit 5 (Jupiter) — API moderna para pruebas. La versión se gestiona centralizadamente mediante eljunit-bom(5.13.4) definido en la seccióndependencyManagement. -
org.springframework:spring-jdbc:6.2.11 Proporciona utilidades como
JdbcTemplatepara simplificar las operaciones con la base de datos y el mapeo de resultados. -
com.h2database:h2:2.4.240 Base de datos SQL en memoria, utilizada para ejecutar tests de integración rápidos sin necesidad de un servidor de base de datos externo.
- Clean Code: Uso de nombres de métodos descriptivos y anotaciones
@DisplayNameen tests para reportes legibles. - Modularidad: Separación clara de responsabilidades en paquetes específicos:
util,discountsypayments. - Documentación: Implementación de Swagger/OpenAPI para la capa de servicios y uso de Javadoc para la lógica interna del negocio.
- Gitflow: Estructura de trabajo basada en ramas
feature/*yhotfix/*para asegurar un desarrollo organizado y estable. - CI/CD: Pipeline configurado en GitHub Actions para validar la compilación y ejecución de tests en cada Pull Request.
- Seguridad: Monitoreo y escaneo automático de vulnerabilidades en dependencias mediante Dependabot.
El proyecto utiliza maven-surefire-plugin (3.5.4) con una configuración personalizada para soportar las últimas características de la JVM:
-
Patrones de nombres: Se ejecutan automáticamente los archivos que terminan en:
*Test.java*Should.java(estilo BDD).
-
JVM Arguments:
-XX:+EnableDynamicAgentLoading: Necesario en versiones modernas de Java para que Mockito pueda interceptar llamadas.-javaagent: Apunta directamente al jar de Mockito en el repositorio local para asegurar su inicialización.
Para ejecutar todas las pruebas desde la terminal, usa:
mvn test¡Las contribuciones son lo que hacen a la comunidad increíble! Si deseas colaborar, sigue estos pasos:
- Haz un Fork del proyecto.
- Crea tu rama de características:
git checkout -b feature/CaracteristicaAsombrosa
- Haz Commit de tus cambios:
git commit -m 'Se añade una característica sorprendente' - Haz Push a la rama:
git push origin feature/CaracteristicaAsombrosa
- Abre un Pull Request
¡Las contribuciones son bienvenidas! Por favor, lee nuestro archivo CONTRIBUTING.md para conocer los detalles sobre nuestro código de conducta y el proceso para enviarnos pull requests.
Este proyecto está bajo la licencia MIT. Consulta el archivo Licencia MIT para más detalles.
Para preguntas o soporte, por favor contacta a Luis Cacuango - luiscacuango2084@gmail.com.