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

[Dúvida] Duvida JUnit com Exception

Ao testar o código com variações percebi que se eu colocar a exceção IllegalArgumentException na classe de calculo de Bônus e ao mesmo tempo colocar o test de assertThrows(Exepetion.class, ...) o teste acaba passando. Imagino que a resposta esteja relacionada com a herança da classe Exception. Mas o mesmo vale para outras classes ? Por exemplo para List e LinkedList.

Classe de Teste

class BonusServiceTest {

    @Test
    void bonusDoSalarioMaiorQueMil() {


        BonusService service = new BonusService();

        //testa a exceção 
        assertThrows(Exception.class,() -> service.calcularBonus(new Funcionario("test1", LocalDate.now(),new BigDecimal(25000))));


    }

}

Classe do BonusService


public class BonusService {

    public BigDecimal calcularBonus(Funcionario funcionario) {

        //Verifica se o salário do funcionario é maior que 10000.00, caso sim, ele não pode receber bonus
        //é lançado então a excessão
        if(funcionario.getSalario().compareTo(new BigDecimal("1000.00")) > 0){
            throw new IllegalArgumentException("Salário não pode receber bonus");
        }


        //caso contrário, o calculo de bonus é realizado 
        BigDecimal valor = funcionario.getSalario().multiply(new BigDecimal("0.1"));
        return valor;
    }

}
1 resposta
solução!

Olá Bruno, tudo bem? Sim, como a classe IllegalArgumentException é uma subclasse da classe Exception se o código lança uma exceção do tipo IllegalArgumentException a classe Exception será aceita como uma correspondência válida, já que é uma superclasse de IllegalArgumentException. No caso de outras classes, como List e LinkedList, a situação é semelhante. Se uma classe é uma subclasse de outra, o método assertThrows vai funcionar com a superclasse como argumento, pois a subclasse também será aceita como uma correspondência válida.