Tests de Aplicación de Películas: Filtrado por Género y Duración
Clase 17 de 24 • Curso Básico de Testing en Java
Resumen
¿Cómo iniciamos la aplicación de películas y sus pruebas?
Empecemos diseñando nuestro propio sistema de pruebas para una aplicación de películas. Primero, nos enfocamos en la parte de lógica de negocio, que es el corazón de la aplicación. Aquí distinguimos entre diferentes componentes, como clases de modelo y dominio. Ya tenemos algunas clases precreadas, como Película
con atributos como id
, nombre
, minutos
y género
, y la clase Género
que define géneros de películas. Además, contamos con un repositorio, que es donde almacenaremos las películas, pero en esta etapa es solo una interfaz.
¿Cómo estructuramos nuestros paquetes y servicios?
Organizamos las clases en diferentes paquetes para mantener la modularidad y claridad del proyecto:
- data: Aquí ubicamos el repositorio encargado de interactuar con la base de datos.
- modelo: Contiene las clases de modelo o dominio, como
Película
yGénero
. - servicio: Incluye la lógica de negocio. En este ejemplo, trabajamos principalmente con
MovieService
.
La implementación del servicio se centrará en lograr que, por ejemplo, se puedan buscar películas por género. Es clave diseñar pruebas unitarías para validar este comportamiento.
¿Cómo escribimos pruebas efectivas para MovieService?
Las pruebas son esenciales para asegurarnos de que nuestra aplicación funciona correctamente. Para el MovieService
, un punto crucial es poder buscar películas por género. Aquí es donde los tests cobran importancia:
-
Definición de la Prueba: Creamos un test para
MovieService
y decidimos qué resultados esperamos, como retornar solo las películas de un género específico, por ejemplo, comedia. -
Uso de Mocks: Como el repositorio aún no tiene implementación, utilizamos
Mockito
para simularlo. ConMockito
, podemos indicar que cuando se llame al métodofindAll
, retorne una lista predefinida de películas. -
Verificación de Resultados: Comprobamos que al buscar películas de un género, solo se devuelvan las correctas usando métodos como
filter
enstreams
.
Aquí un fragmento del código de prueba para buscar películas por género):
// Simulando las películas retornadas por el repositorio
when(repositorio.findAll()).thenReturn(Arrays.asList(
new Película(1, "Comedia P1", 90, Género.COMEDIA),
new Película(2, "Drama P1", 100, Género.DRAMA),
new Película(3, "Comedia P2", 95, Género.COMEDIA)
));
// Método en el servicio para filtrar por género
public List<Película> findMoviesByGenre(Género género) {
return repositorio.findAll().stream()
.filter(p -> p.getGénero().equals(género))
.collect(Collectors.toList());
}
// Verificación en el test
assertThat(movieService.findMoviesByGenre(Género.COMEDIA))
.hasSize(2)
.extracting(Película::getId)
.contains(1, 3);
¿Qué otros ejemplos de pruebas podemos implementar?
Ahora que ya pusimos a prueba el MovieService
por género, otra funcionalidad similar que nos interesa es buscar por duración. Estas pruebas adicionales no solo mejoran la calidad del código, sino que también refuerzan la confianza en que nuestro sistema se comportará como se espera bajo diferentes condiciones.
Cada nuevo método que implementemos en MovieService
debería ir acompañado de una o múltiples pruebas que validen sus resultados y comportamientos excepcionales. Esto no solo es una buena práctica, sino que se convierte en una herramienta esencial para la evolución continua y mantenimiento del software.