Simulando comportamento
Agora, precisamos simular o comportamento do repository (do save e do getReferenceById), que estão sendo usados dentro dos métodos do ProductService.
Para fazer isso, fazemos aquele setUp, montando os possíveis cenários, igual no estudo passado.
Para simular esses cenários, precisamos olhar o comportamento dos métodos.
O insert, por exemplo, utiliza o save, faremos o seguinte:

Instanciaremos um Product e um ProductDTO (fora e depois dentro do setUp)
Criaremos o cenário, usando o
any
e retornando um Product (afinal, é o que acontece no Service, ele retorna uma entity), veja:Cenário para o método insert
O método update, por exemplo, usa o getReferenceByid
(). Além disso, temos um try, caso o ID não exista, irá retornar uma exception.

Fazemos o teste de cenário com ID existente e um com não existente (criando um nonExistingId), igual no outro estudo.

Finalizamos o teste de comportamento do Repository e agora, vamos pros métodos em sí utilizando @Spy.
Atualizado