es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La prueba de JUnit para eliminar una entidad por su id falla.

Estoy intentando hacer una prueba para el método de eliminar una entidad por su id. He escrito la prueba para el caso en que una entidad con el id dado no existe, pero en el caso en que la entidad existe, aparentemente estoy haciendo algo mal. Este es el método de eliminación del servicio. Estoy utilizando el método deleteById() de JpaRepository.

  public void deleteById(Integer id) {
        Optional<agency> optionalAgency = repo.findAll().stream()
                .filter(agency -> agency.getId().equals(id))
                .findFirst();

    if (optionalAgency.isPresent()) {
        repo.deleteById(optionalAgency.get().getId());
    } else {
        throw new AgencyNotFoundException("Agency not found");
    }
}

Y esta es mi prueba:

@Mock
private AgencyRepository agencyRepository;

@Mock
private AgencyMapper mapper;

@InjectMocks
private AgencyService agencyService;

@Test
void delete() {
    Agency agency = new Agency();

    when(agencyRepository.findById(1)).thenReturn(Optional.of(agency));

    agencyService.deleteById(1);

    verify(agencyRepository).deleteById(1);

}

¿Qué afirmación debo hacer para verificar que la eliminación fue exitosa? De la manera en que lo intenté, no funciona, el resultado de la prueba es que se lanza una excepción. Supongo que la excepción se lanza porque agencyRepository.findById((int) 1L); básicamente ya no existe, pero pensé que tal vez hay una mejor manera de verificar la eliminación, sin buscar el objeto eliminado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para verificar que la eliminación se realizó correctamente, puedes utilizar el método verify de Mockito para asegurarte de que el método deleteById fue llamado con el parámetro correcto.

    Aquí tienes un ejemplo de afirmación que puedes realizar:

    verify(agencyRepository).deleteById(1);
    

    Esto verificará que se llamó al método deleteById con el valor 1, que es el id de la entidad que estás intentando eliminar.

    Si la prueba falla con una excepción, es posible que haya algo incorrecto en la implementación del método delete en tu capa de servicio. Asegúrate de que el método deleteById se esté llamando realmente cuando la entidad existe, y de que se lance la excepción correcta cuando no existe.

Comments are closed.