deleteById (existente, não existente e dependente)

Verificando delete (service)

Como o delete é um método void, ele não deve fazer nada... portanto a nomenclatura é ShouldDoNothing.

Além disso, devemos SEMPRE verificar o método na classe original. Por exemplo:

O método da classe Service possui três cenários:

  1. Se o ID não existir, lançará o ResourceNotFound

  2. Daí ele vai pro try. Se existir, ok, ele irá deletar

  3. Caso esse ID caia no catch (ou seja, seja dependente de outra classe no banco de dados), lançará a DataBaseException

ID existente

@Test
public void deleteShouldDoNothingWhenIdExists() {

    Assertions.assertDoesNotThrow(() -> {
        productService.delete(existingId);
    });

    //serve para saber se o método do repository foi chamado alguma vez na ação acima. Recomenda-se fazer isso
    Mockito.verify(productRepository, Mockito.times(1)).deleteById(existingId);
    //o spring não lança exceção quando chama o delete.

}

ID Não existente (ResourceNotFound)

Neste caso, se o id não existe, aí sim terá um comportamento, lançar a exceção.

@Test
public void deleteShouldThrowResourceNotFoundExceptionWhenIdDoesntExist() {

    Assertions.assertThrows(ResourceNotFoundException.class, () -> {
       productService.delete(nonExistingId);
    });
}

Ambos os métodos dão trigger nos cenários feitos no setUp:

ID existente (mas dependente)

Lembrar de instanciar um dependentId para reutilizar:

E criar o cenário de trigger no setUp

@Test
public void deleteShouldThrowDatabaseExceptionWhenDependentId() {
    Assertions.assertThrows(DatabaseException.class, () -> {
       productService.delete(dependentId);
    });
}

Atualizado