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.

Cómo probar los métodos de actualización?

Soy nuevo en las pruebas unitarias y utilizo JUnit en mi aplicación de Java (Spring Boot). A veces necesito probar métodos de actualización, pero cuando busco en la web, no encuentro un ejemplo o sugerencia adecuada. Entonces, ¿podrías por favor aclararme cómo probar el siguiente método de actualización? Creo que esto puede requerir un enfoque diferente a probar void. También pensé que al probar, primero simularía el registro y luego actualizaría su campo y luego actualizaría. Finalmente, volvería a obtener el registro y compararía las propiedades actualizadas. Pero creo que puede haber un enfoque más adecuado que este poco experimentado.

public PriceDTO update(UUID priceUuid, PriceRequest request) {
    Price price = priceRepository
                    .findByUuid(priceUuid)
                    .orElseThrow(() -> new EntityNotFoundException(PRICE));

    mapRequestToEntity(request, price);
    Price updated = priceRepository.saveAndFlush(price);

    return new PriceDTO(updated);
}

private void mapRequestToEntity(PriceRequest request, Price entity) {
    entity.setPriceAmount(request.getPriceAmount());
    // set other props
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para probar el método de actualización anterior, podemos seguir los siguientes pasos:

    1. Crear un objeto simulado de priceRepository y establecer el comportamiento del método findByUuid para que devuelva un objeto Price simulado.
    2. Crear una instancia de PriceRequest con algunos valores para la actualización.
    3. Llamar al método de actualización con el UUID del objeto Price simulado y la instancia creada de PriceRequest.
    4. Verificar que el método saveAndFlush de priceRepository se haya llamado con el objeto Price actualizado.
    5. Verificar que el valor de retorno del método de actualización no sea nulo y contenga los valores actualizados.

    A continuación se muestra un ejemplo de una prueba unitaria para el método de actualización:

    @Test
    public void testUpdatePrice() {
        UUID priceUuid = UUID.randomUUID();
        Price mockedPrice = new Price(priceUuid, 10.00);
        when(priceRepository.findByUuid(priceUuid)).thenReturn(Optional.of(mockedPrice));
    
        PriceRequest request = new PriceRequest(20.00);
        PriceDTO updatedDTO = priceService.update(priceUuid, request);
    
        ArgumentCaptor<price> captor = ArgumentCaptor.forClass(Price.class);
        verify(priceRepository).saveAndFlush(captor.capture());
        Price updatedPrice = captor.getValue();
    
        assertNotNull(updatedDTO);
        assertEquals(request.getPriceAmount(), updatedDTO.getPriceAmount());
        assertEquals(request.getPriceAmount(), updatedPrice.getPriceAmount());
    }
    

    En la prueba anterior, primero creamos un UUID y un objeto Price simulado con el UUID y el valor inicial del precio. Luego, establecemos el comportamiento del método findByUuid de priceRepository para que devuelva el objeto Price simulado cuando se llame con el UUID.

    A continuación, creamos una instancia de PriceRequest con un valor de precio actualizado de 20.00 y llamamos al método de actualización con el UUID y la solicitud. El método devuelve un objeto PriceDTO con los valores actualizados.

    Luego, utilizamos el método verify para asegurarnos de que el método saveAndFlush de priceRepository se haya llamado con el objeto Price actualizado. También utilizamos ArgumentCaptor para capturar el objeto Price actualizado y afirmamos que su valor de precio se haya actualizado a 20.00.

    Finalmente, afirmamos que el valor de retorno del método de actualización no sea nulo y contenga los valores actualizados.

Comments are closed.