Desafío: Pruebas Unitarias
Tarea
Estamos llegando al final de este curso, y para concluir nuestra aplicación, te propongo que termines de escribir todas las pruebas unitarias para las capas de controlador y servicio.
Explicación de la tarea
Debes probar todos los métodos en las capas de controlador y servicio que aún no tienen pruebas escritas. Para esto, se recomienda utilizar JUnit junto con la librería Mockito.
Guía para escribir pruebas con JUnit
Aquí tienes algunos métodos clave que serán útiles:
assertNotNull(result): Garantiza que el resultado de una llamada a método no sea null, confirmando que la operación fue exitosa;
assertEquals(expected, actual): Compara el valor esperado con el valor real para verificar que se devuelve la información correcta;
assertTrue(condition): Verifica que una condición sea verdadera, por ejemplo, asegurando que una lista de libros esté vacía si no hay registros en la base de datos;
verify(mock).methodCall(): Verifica que un método específico en un objeto simulado haya sido llamado con los parámetros esperados, validando la interacción entre componentes;
when(mock.methodCall()).thenReturn(value): Configura un mock para devolver un valor determinado cuando se llama a un método, simulando dependencias en tus pruebas.
Pruebas de Controlador
Aquí, las pruebas ya han sido escritas para los métodos findAllBooks, findByAuthor, createBook y updateBook. Será necesario escribir pruebas para el método restante. A continuación se presentan algunos consejos para ayudarte a implementar la prueba de este método.
deleteBooks(String id)
Para el método deleteBooks(String id), es necesario verificar que el método de eliminación se llame con el id correcto y probar el manejo de errores al intentar eliminar un libro inexistente. Para una respuesta exitosa, verifica solo el estado; para los errores, verifica tanto el estado como el mensaje de error.
BookService.java
1234567@Transactional public void deleteBook(String id) { if(!bookRepository.existsById(id)) { throw new ApiException("Not found by id: " + id, HttpStatus.NOT_FOUND); } bookRepository.deleteById(id); }
Para el controlador, será necesario escribir dos pruebas para este método: una para la eliminación exitosa y otra para cuando se devuelve un 404 status.
Tenga en cuenta que el método del servicio que se va a simular no retorna ningún valor, al igual que el controlador.
Puede utilizar el método doNothing() para simular un método void, asegurando que no se realicen acciones al invocarlo. La sintaxis es:
doNothing().when(someService).someVoidMethod();
Cuando sea necesario gestionar un escenario en el que se lanza una excepción, utilice doThrow(). Este método en Mockito simula el lanzamiento de una excepción desde un método void. La sintaxis es:
doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");
Pruebas de Servicio
deleteBook(String id)
El método deleteBook(String id) requiere validación para garantizar que el método de eliminación de libro se invoque con el id correcto. Además, es fundamental probar cómo el método gestiona la situación cuando no se encuentra un libro con el id especificado.
Será necesario implementar dos pruebas: una donde la entidad se encuentra por id y es eliminada, y otra donde se lanza una excepción.
¿Qué hacer si no puedes escribir pruebas?
Es totalmente aceptable si no comprendiste el tema en tu primer intento; puede que necesites repasar los conceptos de pruebas nuevamente. También se recomienda revisar la solución de esta tarea.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain how to write a test for the deleteBook method in the service layer?
What should I focus on when testing the controller's deleteBooks method?
Can you clarify how to use doThrow and doNothing in Mockito for these tests?
Awesome!
Completion rate improved to 3.45
Desafío: Pruebas Unitarias
Desliza para mostrar el menú
Tarea
Estamos llegando al final de este curso, y para concluir nuestra aplicación, te propongo que termines de escribir todas las pruebas unitarias para las capas de controlador y servicio.
Explicación de la tarea
Debes probar todos los métodos en las capas de controlador y servicio que aún no tienen pruebas escritas. Para esto, se recomienda utilizar JUnit junto con la librería Mockito.
Guía para escribir pruebas con JUnit
Aquí tienes algunos métodos clave que serán útiles:
assertNotNull(result): Garantiza que el resultado de una llamada a método no sea null, confirmando que la operación fue exitosa;
assertEquals(expected, actual): Compara el valor esperado con el valor real para verificar que se devuelve la información correcta;
assertTrue(condition): Verifica que una condición sea verdadera, por ejemplo, asegurando que una lista de libros esté vacía si no hay registros en la base de datos;
verify(mock).methodCall(): Verifica que un método específico en un objeto simulado haya sido llamado con los parámetros esperados, validando la interacción entre componentes;
when(mock.methodCall()).thenReturn(value): Configura un mock para devolver un valor determinado cuando se llama a un método, simulando dependencias en tus pruebas.
Pruebas de Controlador
Aquí, las pruebas ya han sido escritas para los métodos findAllBooks, findByAuthor, createBook y updateBook. Será necesario escribir pruebas para el método restante. A continuación se presentan algunos consejos para ayudarte a implementar la prueba de este método.
deleteBooks(String id)
Para el método deleteBooks(String id), es necesario verificar que el método de eliminación se llame con el id correcto y probar el manejo de errores al intentar eliminar un libro inexistente. Para una respuesta exitosa, verifica solo el estado; para los errores, verifica tanto el estado como el mensaje de error.
BookService.java
1234567@Transactional public void deleteBook(String id) { if(!bookRepository.existsById(id)) { throw new ApiException("Not found by id: " + id, HttpStatus.NOT_FOUND); } bookRepository.deleteById(id); }
Para el controlador, será necesario escribir dos pruebas para este método: una para la eliminación exitosa y otra para cuando se devuelve un 404 status.
Tenga en cuenta que el método del servicio que se va a simular no retorna ningún valor, al igual que el controlador.
Puede utilizar el método doNothing() para simular un método void, asegurando que no se realicen acciones al invocarlo. La sintaxis es:
doNothing().when(someService).someVoidMethod();
Cuando sea necesario gestionar un escenario en el que se lanza una excepción, utilice doThrow(). Este método en Mockito simula el lanzamiento de una excepción desde un método void. La sintaxis es:
doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");
Pruebas de Servicio
deleteBook(String id)
El método deleteBook(String id) requiere validación para garantizar que el método de eliminación de libro se invoque con el id correcto. Además, es fundamental probar cómo el método gestiona la situación cuando no se encuentra un libro con el id especificado.
Será necesario implementar dos pruebas: una donde la entidad se encuentra por id y es eliminada, y otra donde se lanza una excepción.
¿Qué hacer si no puedes escribir pruebas?
Es totalmente aceptable si no comprendiste el tema en tu primer intento; puede que necesites repasar los conceptos de pruebas nuevamente. También se recomienda revisar la solución de esta tarea.
¡Gracias por tus comentarios!