(RESOLVIDO) Duvida com Assertions.. Qual a verdadeira finalidade?

8 respostas
GabrielCardelli

Galera tudo bom?

TÔ no cap 5 do Livro da Kathy SCJP e tô com duvidas sobre assertions..

Elas só servem para testar algo e se der errado enviar um erro? é isso?

EX:

import java.util.Scanner;
public class TestAssertion {   
  
    public static void main(String[] args) {   
    	int numero = 0;
    	try{
        Scanner entrada = new Scanner( System.in );   
        System.out.print( "Entre com um número entre 0 e 10: " );     
        numero = entrada.nextInt();   
        	
         assert ( numero >= 0 && numero <= 10 ) ;   
         System.out.printf("Você digitou %d\n", numero);  
    	}catch(Error e){
    		System.err.println("ERRO!");
    	}
    }
}

É só essa finalidade? Abraço.. Obrigado desde já!! :lol: :lol: :lol:

8 Respostas

LPJava

confira assertion

flw!

Lavieri

não é para testar, é para assegurar, é um pouco diferente...

por exemplo, vc esta em um ponto interno da sua classe, onde vc tem certeza que ali nunca vai entrar um int chamado "var" menor que zero, então vc coloca um

assert(var >= 0);

ali em desenvolviemento, vc tem como rodar o programa com os assertions ligados, onde esta garantido que ali nunca tera var menor que zero, e fazer suas coisas sem constantemente checar e tratar, pois vc ja tem certeza que nunca ocorrera, e caso encontre um var < 0 ... um ERROR sera lançado, parando seu aplicativo, que vc esta rodando, e assim debugar o problema no ato... talvez esse int negativo, possa gerar um erro muito + na frente, que torne mais dificil de localizar o problema...

e quando vc coloca um assert, vc esta afirmando, que qualquer coisa diferente dakilo não é esperado, não é uma exceção e sim um erro, houve uma falha no desenvolvimento que levou aquele valor...

o objetivo do assert é colocar marcações nas suas classes com afirmações sobre um stado que vc tem certeza que nunca sera false....

os asserts são desligados quando se faz a destribuição, esses testes somem, e não consomem processo nem tratamento algum, pois assume-se que eles não ocorrerão...

por isso não é boa pratica colocar asserts em métodos publicos, pois vc nunca saberá o que outra classe vai enviar para dentro de sua classe, não da pra presumir que um método publico que vc criou, sempre receberá valor não nulos, o correto é verificar e tratar isso... porem dentro da sua classe, vc pode assumir que vc nunca enviará um valor nulo pra dentro de outro método que é private... por exemplo

public boolean equals(Object o) {
     return o instanceof Pessoa && equals((Pessoa)o);
}

//método private
private boolean equals(Pessoa other) {
     assert(other != null); //vc garante que nunca será enviado other == null, o método é private
     //e vc checou antes com o instanceof Pessoa, portanto assegura que nunca receberá nulo.
     return getId() == null ? false : getId().equals(other.getId());
}

qualquer outro método que for usar esse equals privado, deve assegurar de não enviar pra ele um objeto null, pois dentro do método não é teste quanto a isso

...........

tb to estudando pro SCJP to no capitulo 8 do livro... to sempre pelo MSN, se quiser me adciona.... jaja vou entrar na segunda leitura do livro ^^

qualquer coisa manda PM q passo o msn

GabrielCardelli

Valeu!! Um amigo tinha me enviado o msm link!!

Minha duvida foi resolvida! Obrigado!!

GabrielCardelli

Lavieri me falaseu msn!!

Abraço veio!

Lavieri

ja enviei… o msn…

ahh

dei um edit no meu post, pra ficar mais claro…

peczenyj

http://guj.com.br/article.show.logic?id=23

jimmyhc

Cara Lauvieri, muito boa sua dica.

…eu pensei q sabia assertions! kk

Lavieri

jimmyhc:
Cara Lauvieri, muito boa sua dica.

…eu pensei q sabia assertions! kk

\o/ estamos ai pra ajudar ^^ … qualquer duvida manda as ordens…

e vc pensava q assertions fosse o q ? =x

abraços!

Criado 2 de maio de 2009
Ultima resposta 6 de mai. de 2009
Respostas 8
Participantes 5