Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

luiscacuango2/JavaTest

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

javatest

Java Maven JUnit 5 License Mockito H2 Spring Tests Build Status Java CI

Descripción

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.


Funcionalidades Principales

  • 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 JdbcTemplate y soporte para bases de datos SQL.
  • Calidad de Código: Cobertura de pruebas unitarias con Mockito e integración con base de datos H2.

Utilidades y Cobertura de Tests

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

Estrategia de Testing

Para asegurar la robustez del sistema, empleamos una pirámide de pruebas equilibrada:

  1. Unit Tests (JUnit 5): Validamos la lógica pura de algoritmos y utilidades en aislamiento total.
  2. Doubles & Mocks (Mockito): Aislamos las dependencias externas (servicios, repositorios) para probar el comportamiento de la capa de negocio sin efectos colaterales.
  3. 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.

Stack Técnico

  • 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.

Instalación y Uso

  1. Clonar y navegar:
    git clone https://github.com/luiscacuango2/JavaTest.git
    cd javatest
  2. Ciclo de vida de Maven:
     mvn clean package  # Compilar y empaquetar
     mvn test           # Ejecutar suite de pruebas unitarias
  3. 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:+EnableDynamicAgentLoading en el entorno de pruebas.

Estructura del Proyecto

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

Dependencias

  • 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 el javaagent y la flag -XX:+EnableDynamicAgentLoading en el maven-surefire-plugin para 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 el junit-bom (5.13.4) definido en la sección dependencyManagement.

  • org.springframework:spring-jdbc:6.2.11 Proporciona utilidades como JdbcTemplate para 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.


Buenas Prácticas Implementadas

Calidad de Código

  • Clean Code: Uso de nombres de métodos descriptivos y anotaciones @DisplayName en tests para reportes legibles.
  • Modularidad: Separación clara de responsabilidades en paquetes específicos: util, discounts y payments.
  • Documentación: Implementación de Swagger/OpenAPI para la capa de servicios y uso de Javadoc para la lógica interna del negocio.

Infraestructura y Git

  • Gitflow: Estructura de trabajo basada en ramas feature/* y hotfix/* 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.

Configuración de Ejecución (Surefire)

El proyecto utiliza maven-surefire-plugin (3.5.4) con una configuración personalizada para soportar las últimas características de la JVM:

  1. Patrones de nombres: Se ejecutan automáticamente los archivos que terminan en:

    • *Test.java
    • *Should.java (estilo BDD).
  2. 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.

Cómo ejecutar los tests

Para ejecutar todas las pruebas desde la terminal, usa:

mvn test

Contribuciones y Licencia

¡Las contribuciones son lo que hacen a la comunidad increíble! Si deseas colaborar, sigue estos pasos:

  1. Haz un Fork del proyecto.
  2. Crea tu rama de características:
    git checkout -b feature/CaracteristicaAsombrosa
  3. Haz Commit de tus cambios:
    git commit -m 'Se añade una característica sorprendente'
  4. Haz Push a la rama:
    git push origin feature/CaracteristicaAsombrosa
  5. Abre un Pull Request

Contribución

¡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.

Licencia

Este proyecto está bajo la licencia MIT. Consulta el archivo Licencia MIT para más detalles.

Contacto

Para preguntas o soporte, por favor contacta a Luis Cacuango - luiscacuango2084@gmail.com.

About

Tipos de test en Java con librerías JUnit y Mockito.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.