Substituir Exceção por Teste.
Você lança uma exceção em um lugar onde um teste simples faria o trabalho?
Substitua a exceção por um teste de condição.
##Example
double getValueForPeriod(int periodNumber) {
try {
return values[periodNumber];
} catch (ArrayIndexOutOfBoundsException e) {
return 0;
}
}double getValueForPeriod(int periodNumber) {
if (periodNumber >= values.length) {
return 0;
}
return values[periodNumber];
}##Why Refactor
As exceções devem ser usadas para tratar comportamentos irregulares relacionados a um erro inesperado. Elas não devem servir como substituto para testes. Se uma exceção pode ser evitada simplesmente verificando uma condição antes da execução, então faça isso. As exceções devem ser reservadas para erros reais.
Por exemplo, você entrou em um campo minado e acionou uma mina ali, resultando em uma exceção; a exceção foi tratada com sucesso e você foi lançado pelos ares até a segurança, para além do campo minado. Mas você poderia ter evitado tudo isso simplesmente lendo, para começar, a placa de aviso em frente ao campo minado.
##Benefits
- Uma condicional simples às vezes pode ser mais óbvia do que código de tratamento de exceções.
##How to Refactor
-
Crie uma condicional para um caso de borda e mova-a para antes do bloco try/catch.
-
Mova o código da seção
catchpara dentro dessa condicional. -
Na seção
catch, coloque o código para lançar uma exceção comum, sem nome, e execute todos os testes. -
Se nenhuma exceção foi lançada durante os testes, livre-se do operador
try/catch.