30.14. Desarrollo de API REST con Spring Boot: pruebas unitarias y de integración
Al desarrollar una API REST con Spring Boot, es esencial garantizar la calidad del código y la confiabilidad del punto final. Una forma eficaz de lograr este objetivo es implementar pruebas unitarias y de integración. En esta sección, exploraremos cómo crear y ejecutar estas pruebas dentro de un proyecto Spring Boot, asegurando que su API REST funcione como se esperaba.
Pruebas unitarias
Las pruebas unitarias son la base de cualquier estrategia de prueba en el desarrollo de software. Son rápidos, aislados y se centran en una pequeña parte del código, como métodos o clases. En el contexto de Spring Boot, generalmente utilizamos marcos como JUnit y Mockito para escribir pruebas unitarias.
JUnidad
JUnit es un marco de pruebas para el lenguaje de programación Java que nos permite escribir y ejecutar pruebas repetibles. Con JUnit, podemos asegurarnos de que los métodos de nuestras clases funcionen como se esperaba.
Mockito
Mockito es un marco que le permite crear objetos simulados en pruebas unitarias. Esto es útil cuando necesitamos probar la lógica de una clase sin depender de sus dependencias externas, como bases de datos u otros servicios.
Ejemplo de prueba unitaria
@SpringBootTest prueba de servicio de usuario de clase pública { @MockBean repositorio de usuarios privado repositorio de usuarios; @autocableado Servicio de usuario privado Servicio de usuario; @Prueba vacío público cuandoSaveUser_thenSuccess() { Usuario usuario = nuevo Usuario("John Doe", "john.doe@example.com"); Mockito.when(userRepository.save(usuario)).luegoReturn(usuario); Usuario creado = userService.createUser(usuario); afirmarQue(created.getName()).isEqualTo(user.getName()); afirmarQue(created.getEmail()).isEqualTo(user.getEmail()); } }
En el ejemplo anterior, estamos probando el método createUser
de UserService
. Usamos @MockBean
para simular el UserRepository
y @Autowired
para inyectar la instancia de UserService
que queremos probar. Con Mockito simulamos el comportamiento del método save
del repositorio para devolver el usuario que estamos creando. De esta forma podremos comprobar si el servicio funciona correctamente sin tener que interactuar con la base de datos.
Pruebas de integración
Las pruebas de integración son importantes para garantizar que las diferentes partes del sistema funcionen juntas. En Spring Boot, podemos usar Spring MVC Test Framework para simular llamadas HTTP a la API y verificar el comportamiento de la aplicación en su conjunto.
Marco de prueba Spring MVC
Este marco le permite escribir pruebas que envían solicitudes HTTP al DispatcherServlet (el controlador frontal Spring MVC) y verificar las respuestas. Con esto, es posible probar controladores, rutas y estados de respuesta sin necesidad de implementar la aplicación en un servidor web real.
Ejemplo de prueba de integración
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc clase pública UserControllerIntegrationTest { @autocableado MockMvc privado MockMvc; @Prueba vacío público cuandoGetUser_thenStatus200() lanza una excepción { simulacroMvc.perform(get("/usuarios/1")) .andExpect(estado().isOk()) .andExpect(jsonPath("$.name").value("John Doe")) .andExpect(jsonPath("$.email").value("john.doe@example.com")); } }
En el ejemplo anterior, utilizamos @SpringBootTest
con la opción webEnvironment
para iniciar el contexto Spring Boot y hacer que un servidor web esté disponible en un puerto aleatorio. Con @AutoConfigureMockMvc
, Spring Boot configura automáticamente MockMvc
, que es un punto central para las pruebas de integración en Spring MVC. Usamos MockMvc
para simular una solicitud GET al endpoint /users/1
y verificar si la respuesta tiene el estado HTTP 200 (OK), además de verificar si el contenido de la respuesta contiene los datos esperados.
Consideraciones finales
Las pruebas unitarias y de integración son fundamentales en el desarrollo de API REST con Spring Boot. Ayudan a garantizar que cada parte del código funcione de forma aislada y que todas las partes funcionen juntas como se espera. Utilizando marcos como JUnit y Mockito, junto con las capacidades de Spring MVC Test Framework, puede crear un conjunto sólido de pruebas que aumentarán la confianza en su código y reducirán la posibilidad de errores en producción.
Además, una estrategia de pruebas bien definida facilita el mantenimiento y la evolución de la aplicación, ya que cualquier cambio que rompa la funcionalidad existente será identificado rápidamente mediante las pruebas. Así que invierte tiempoy recursos para escribir y mantener pruebas de calidad, y su API REST con Spring Boot será mucho más sólida y confiable.