Testando Insert

No método insert do ProductService, na primeira linha ele já tem o método validateData, passando o DTO. Portanto, já temos um teste de insert com dois cenários, com data válida e inválida.

Data inválida seria: nome vazio, preço nulo ou menor que zero.

Masss, temos um problema. O método validateData está dentro do ProductService, e como ele é protected só pode ser usado por quem está dentro do pacote. Como fazer para simular o seu comportamento? Nós usaremos o Spy, veja abaixo:

InsertWithValidData

    @Test
    public void InsertShouldReturnProductDTOWhenValidData() {
        //criando uma variável do tipo ProductService com o Spy, 
        // espionando o service lá de cima com @InjectMocks
        ProductService serviceSpy = Mockito.spy(productService);

        //é um doNothing porque nesse caso, é um caso de sucesso
        Mockito.doNothing().when(serviceSpy).validateData(productDTO);

        //instanciando o resultando, fazendo a ação
        ProductDTO result = serviceSpy.insert(productDTO);

        //verificações
        Assertions.assertNotNull(result);
        Assertions.assertEquals(result.getName(), "Playstation");
    }

InsertWithInvalidData (name e price)

Name

@Test
    public void inserShouldReturnInvalidDataExceptionWhenNameIsEmpty() {
        //settando nome nulo
        productDTO.setName("");
        
        //fazendo o Spy novamente
        ProductService serviceSpy = Mockito.spy(productService);

        //dessa vez com doThrow, pois esperamos uma exception
        Mockito.doThrow(InvalidDataException.class)
                .when(serviceSpy).validateData(productDTO);

        //verificando
        Assertions.assertThrows(InvalidDataException.class, () -> serviceSpy.insert(productDTO));
    }

Price

    @Test
    public void InsertShouldReturnInvalidDataExceptionWhenPriceIsNullOrLessThanZero() {
        productDTO.setPrice(-5.0);
        
        ProductService serviceSpy = Mockito.spy(productService);

        Mockito.doThrow(InvalidDataException.class)
                .when(serviceSpy).validateData(productDTO);

        Assertions.assertThrows(InvalidDataException.class, () -> serviceSpy.insert(productDTO));
    }

Atualizado