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:
Se o ID não existir, lançará o ResourceNotFound
Daí ele vai pro try. Se existir, ok, ele irá deletar
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