terça-feira, 14 de agosto de 2012

Utilizando o comando assert


O comando assert foi inserido ao mundo Java a partir da versão 1.4 com o objetivo de facilitar testes que envolvem exceções, onde o uso das condições corriqueiras if/else e switch/case não seriam de boa prática.
 
Não entendi nada!
É o seguinte: imagine que você estivesse criando um aplicativo qualquer onde em determinado momento, você queira realizar um teste da lógica.
SE ocorrer alguma coisa
  Beleza, tudo tá funcionando direitinho!
SENÃO
  throw new Exception( "Puxa vida!" );
Isso é uma prática comum no desenvolvimento. Várias e várias vezes os programadores precisam declarar códigos lógicos para verificar a própria lógica da aplicação. Imagine um comando que pudesse disparar Exceptions em casos de falhas na lógica somente em tempo de desenvolvimento? Esse comando existe, e se chama assert.
 
Com o comando assert, é possível verificar a lógica de uma condição. Se a condição for verdadeira, nada acontece. Se for falsa, o comando automaticamente dispara um AssertionError. Vamos a um exemplo:
  
public class Test {
 
  public void regra() {
    System.out.println( "Executa algo" );
    boolean condicao = false;
    assert condicao;
    System.out.println( "Executa algo" );
  }
 
  public static void main(String args[]) {
    Test test = new Test();
    test.regra();
  }
 
}
 
Neste caso, quando o programa for executado, como condicao é false, uma AssertionError (que não pode ser manipulada) é lançada.
Como saída, este programa teria:
 
Executa algo
Exception in thread "main" java.lang.AssertionError
        at Test.regra(Test.java:6)
        at Test.main(Test.java:12)
 
Observe que a execução termina antes do segundo System.out.print, pois a assert dispara o erro.
Este é um exemplo simples, onde a AssertionError vem sem descrição do problema. Uma alternativa ao comando seria definir, após a condição, algum objeto ou método que formaria a descrição do problema. Veja o exemplo:
 
public class Test {
 
  public void regra() {
    System.out.println( "Executa algo" );
    boolean condicao = false;
    assert condicao : "Alguma coisa está errada aqui!";
    System.out.println( "Executa algo" );
  }
 
  public static void main(String args[]) {
    Test test = new Test();
    test.regra();
  }
 
}
 
Neste caso, a AssertionError gerada mostraria o texto definido após os : (dois pontos). A saída seria:
 
Executa algo
Exception in thread "main" java.lang.AssertionError: Alguma coisa está errada aqui!
        at Test.regra(Test.java:6)
        at Test.main(Test.java:12)
 
Mas espera ai! Como eu vou definir que este código só será aceito em tempo de desenvolvimento?
 
Boa pergunta. Para ativar a Assertion você precisa executar dois passos:
Passo 1: compilar o código com a tag "-source 1.4" para evitar erros de compatibilidade. Exemplo:
 
javac -source 1.4 Test.java
 
Passo 2: Habilitar os comandos assert na execução do bytecode com a tag "-ea" (ou com sua irmã maior "-enableAssertion"). Exemplo:
 
java -ea Test
 
Muito cuidado! 
 
Atenção! Nunca use este comando com substituto do IF/ELSE. Ele é para ser usado em desenvolvimento e portanto não poderá causar diferenças na lógica do programa. Ele também não pode ser usado para testes de entrada de dados. Sua utilização é para testes na lógica. Portanto, use com moderação...
 
Referências:

Espero ter ajudado!
Guilherme Pontes

Nenhum comentário:

Postar um comentário