SpringBoot: Testing con Spring Test

Aprende a realizar testing con Spring Test en Spring Boot 3. Guía práctica para implementar y ejecutar pruebas unitarias y de integración.

El módulo de testing en Spring Boot 3 facilita la creación y ejecución de pruebas unitarias y de integración mediante el uso de Spring Test. Este módulo proporciona herramientas y anotaciones que permiten realizar pruebas de manera eficiente y con un alto grado de cobertura.

Configuración inicial

Para comenzar, es necesario incluir las dependencias adecuadas en el archivo build.gradle o pom.xml de tu proyecto. Asegúrate de tener las siguientes dependencias:

Gradle

dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

Maven

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

Pruebas unitarias con Spring Test

Las pruebas unitarias se centran en probar componentes individuales de la aplicación. Spring Test proporciona la anotación @SpringBootTest para cargar el contexto de Spring y @MockBean para simular dependencias.

Ejemplo de prueba unitaria

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.mockito.Mockito.*;
import static org.assertj.core.api.Assertions.*;

@SpringBootTest
public class ServicioUsuarioTest {

@Autowired
private ServicioUsuario servicioUsuario;

@MockBean
private RepositorioUsuario repositorioUsuario;

@Test
public void testObtenerUsuario() {
Usuario usuario = new Usuario("Juan", "juan@example.com");
when(repositorioUsuario.findById(1L)).thenReturn(Optional.of(usuario));

Usuario resultado = servicioUsuario.obtenerUsuario(1L);
assertThat(resultado.getNombre()).isEqualTo("Juan");
}
}

Pruebas de integración con Spring Test

Las pruebas de integración verifican la interacción entre múltiples componentes. Spring Boot 3 permite configurar un entorno de pruebas que simula el entorno de producción.

Ejemplo de prueba de integración

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.ResponseEntity;
import static org.assertj.core.api.Assertions.*;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ControladorUsuarioTest {

@Autowired
private TestRestTemplate restTemplate;

@Test
public void testObtenerUsuario() {
ResponseEntity<Usuario> response = restTemplate.getForEntity("/usuarios/1", Usuario.class);
assertThat(response.getStatusCodeValue()).isEqualTo(200);
assertThat(response.getBody().getNombre()).isEqualTo("Juan");
}
}

Uso de perfiles de prueba

Spring Boot 3 permite el uso de perfiles de prueba para configurar diferentes entornos. Esto es útil para aislar las pruebas de integración de la configuración de producción.

Configuración de un perfil de prueba

# application-test.yml
spring:
datasource:
url: jdbc:h2:mem:testdb
driverClassName: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true

Para ejecutar las pruebas con este perfil, utiliza la siguiente configuración:

import org.springframework.test.context.ActiveProfiles;

@ActiveProfiles("test")
@SpringBootTest
public class RepositorioUsuarioTest {
// pruebas aquí
}
Certifícate en SpringBoot con CertiDevs PLUS

Lecciones de este módulo de SpringBoot

Lecciones de programación del módulo Testing con Spring Test del curso de SpringBoot.

Ejercicios de programación en este módulo de SpringBoot

Evalúa tus conocimientos en Testing con Spring Test con ejercicios de programación Testing con Spring Test de tipo Test, Puzzle, Código y Proyecto con VSCode.