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
@TestpublicvoidupdateShouldUpdateWhenIdExistsAndValidData() {//fazendo o Spy do service novamente parar que possamos acessar a função//validateDataProductService serviceSpy =Mockito.spy(productService);Mockito.doNothing().when(serviceSpy).validateData(productDTO);//criando um DTO resultado, usando o Spy e o updateProductDTO result =serviceSpy.update(existingId, productDTO);//assertionsAssertions.assertNotNull(result);Assertions.assertEquals(result.getId(), existingId); }
Update com id existente e data invalida (nome em branco)
@TestpublicvoidupdateShouldReturnInvalidDataExceptionWhenIdExistsAndProductNameIsBlank() {//settando inicialmente nome para nuloproductDTO.setName("");//fazendo spy novamenteProductService serviceSpy =Mockito.spy(productService);//dessa vez doThrow, pois esperamos uma exceptionMockito.doThrow(InvalidDataException.class).when(serviceSpy).validateData(productDTO);//assertionAssertions.assertThrows(InvalidDataException.class, () ->serviceSpy.update(existingId, productDTO)); }
Update com id existente e data invalida (preço menor que zero)