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.
Aprende SpringBoot GRATIS y certifícateEl 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í
}
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.