Testando update

O método update recebe dois parâmetros, um Long id e um ProductDTO, ele faz um try-catch e um validateData também.

Temos então, os seguintes cenários:

Update com id existente e data válida

 @Test
    public void updateShouldUpdateWhenIdExistsAndValidData() {
        //fazendo o Spy do service novamente parar que possamos acessar a função
        //validateData
        ProductService serviceSpy = Mockito.spy(productService);
        Mockito.doNothing().when(serviceSpy).validateData(productDTO);

        //criando um DTO resultado, usando o Spy e o update
        ProductDTO result = serviceSpy.update(existingId, productDTO);

        //assertions
        Assertions.assertNotNull(result);
        Assertions.assertEquals(result.getId(), existingId);

    }

Update com id existente e data invalida (nome em branco)

 @Test
    public void updateShouldReturnInvalidDataExceptionWhenIdExistsAndProductNameIsBlank() {
        //settando inicialmente nome para nulo
        productDTO.setName("");

        //fazendo spy novamente
        ProductService serviceSpy = Mockito.spy(productService);
        //dessa vez doThrow, pois esperamos uma exception
        Mockito.doThrow(InvalidDataException.class)
                .when(serviceSpy).validateData(productDTO);

        //assertion
        Assertions.assertThrows(InvalidDataException.class, () -> serviceSpy.update(existingId, productDTO));
    }

Update com id existente e data invalida (preço menor que zero)

Update com id inexistente e data valida

Update com id inexistente e data invalida (nome em branco)

Update com id inexistente e data invalida (preço menor que zero)

Atualizado