Ola boa tarde, como faco para lancar a excessao aqui nesse caso, estou fazendo uns TESTES, e aqui quero que lance o erro de excessao mais quando executo ele ocorre tudo beim e nao dar ERRO, meu objetivo é dar o erro…
@Test(expected = Exception.class) public void DesempilharPilhaVazia(){ Assert.assertThat(pilha.estaVazia(), is(true)); pilha.desempilhar(); fail("A pilha não deu erro"); }
Salvo Engano, o metodo fail vai lançar uma Exception ( algo como uma AssertionException ).
portanto se tanto o fail quanto o .desempilhar lançarem qq exception, o teste vai passar.
por conta das regras de exception, vc é obrigado a tratar, avisar que o metodo vai deixar passar" qualquer Exception EXCETO as RuntimeException e suas filhas. por que? uma longa historia.
da pra perceber que o desempilhar lança uma RuntimeException, assim como fail.
Como resolver isso? tenho minhas sugestões:
Crie a SUA exception. seja estendendo RuntimeException ou Exception normal. E ai na assertion vc espera esse tipo especifico
remove este fail, ele não serve pra nada. vc diz “o teste é esperar uma Exception”. não tem pq colocar esse fail. se o .desempilhar não explodir, o seu teste vai falhar.
Sim, eu simulei este caso ai. P/ dar erro de que este metodo nao pode ocorrer se a pilha estiver vazia eu utilizei um pilha.get(0) então irá dar IndexOutOfBoundsException. Aparenta o problema está no metodo pilha.desempilhar(). Posta o codigo desse metodo por gentileza.
EDIT:
Agora com a imagem entendi. Mano não está errado, procede da forma que você pediu, seu metodo está esperando a exception e ela deu, então testes OK …