Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Metodo Void lançando uma Exception, como testar ??

Caso eu tenha um método void que lança uma exception (Exemplo simples apenas didático abaixo), como eu poderia testar ??? Fiquei perdido pois dentro do método temos uma regra e não consegui chegar nela usando Mocks.

@Autowired
private PessoaRepository pessoaRepo;

public void save(Pessoa pessoa) throws Exception {

    if (pessoa.getIdade() > 30) {
        throw new Exception("Erro ao Salvar dados");
    }

    pessoaRepo.save(pessoa);

}

Exemplo do Teste:
        try {
            Mockito.doThrow(new Exception()).doNothing().when(pessoaService).save(pessoa);
            Mockito.verifyNoInteractions(pessoaRepo.save(pessoa));
        } catch (Exception e) {

        }
1 resposta
solução!

Oi Oscar,

Nesse seu exemplo o Mock deve ser feito no atributo PessoaRepository, pois essa classe vai acessar o banco de dados e no teste de unidade não desejamos isso.

E para testar o cenário que lança a exception basta passar um objeto pessoa com uma idade maior que 30:

@RunWith(MockitoJUnitRunner.class) //substitui o MockitoAnnotations.initMocks(this)
public class PessoaServiceTest {

    @Mock
    private PessoaRepository repository;

    @InjectMocks //instancia a classe e injeta nela os mocks que foram declarados aqui no teste
    private PessoaService service;

    @Test(expected = Exception.class)
    public void naoDeveriaSalvarPessoaComMaisDe30Anos() throws Exception {
        Pessoa p = new Pessoa();
        p.setIdade(35);

        service.save(p);
    }

    @Test
    public void deveriaSalvarPessoaComMenosDe30Anos()  throws Exception {
        Pessoa p = new Pessoa();
        p.setIdade(22);

        service.save(p);

        Mockito.verify(repository.save(p));
    }

    @Test
    public void deveriaSalvarPessoaComExatos30Anos()  throws Exception {
        Pessoa p = new Pessoa();
        p.setIdade(30);

        service.save(p);

        Mockito.verify(repository.save(p));
    }

}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software