Duvida Assertivas

23.int z=5; 24. 25. public void stuff1(int x) { 26. assert (x> 0); 27. switch(x) { 28. case 2: x= 3; 29. default: assert false; } } 30. 31. private void stuff2(int y) { assert (y < 0); } 32. 33. private void stuff3() { assert (stuff4O); } 34. 35. private boolean stuff4() { z = 6; return false; } Which is true? A. All of the assert statements are used appropriately. B. Only the assert statement on line 31 is used appropriately. C. The assert statements on lines 29 and 31 are used appropriately. D. The assert statements on lines 26 and 29 are used appropriately. E. The assert statements on lines 29 and 33 are used appropriately. F. The assert statements on lines 29, 31, and 33 are used appropriately. G. The assert statements on lines 26, 29, and 31 are used appropriately.

Resposta certa do testkiller falou que seria a C, mais eu discordo com isso, olhe o que esta escrito no livro da kathy.

Não use assertivas, mesmo em métodos públicos, para procurar instruções case que sabe que nunca ocorrerão
Isso pode incluir blocos de códigos que provavelmente nunca serão alcançados, como bloco default de uma instrução switch.

bom … parece q sua duvida é quando ao default …

é apropriado vc usar a expressão “assert false” quando vc tem certeza q o programa nao devia ter chegado ai …

é inapropriado vc realizar uma avaliação … caso o programa chegue à linha q não deveria ter chegado …
mas é apropriado vc colocar o false direto … assert false … q é o q tah colocando na pergunta XD

se tu tah usando o livro da scjp 5 portugues … tu vai encontrar na pagina 222 bem no rodapé … um exemplo igual

dizendo q não pode executar um teste … e sim afirmar q será false

XD

Acho que entendi, então ja teria essa maldade na cabeça? é apropriado pelo fato de quando o case chegar até default seria o caso de todos os testes case darem errado?, ou seja em algum momento que isso acontecer, se acontecer, se chegar até default ira lançar o AssertionError pelo assert já ser false.

não entendi bem o q c falou agora rsrsrsrs

mas é issu ai

se chegou no default vc nun tem q testar mais nada … tah jah sabe q não devia ter chegado lah e pronto tu tem q falar assert false

se tu falar assert (variavelBool) ai é incoerente … jah q tu tem certeza q ALI não devia ter chegado

chegou ali … tem q dar erro e pronto … nao tem mais nada o q testar

Então quer dizer que só pq ele disse
C. The assert statements on lines 29 and 31 are used [size=18][color=red]appropriately[/color][/size].
mesmo a linha 26

26. assert (x> 0);

compilando e rodando normalmente, por causa do [size=18][color=red]appropriately[/color][/size] a resposta certa é a C ?

To certo???

Eu acho que a confusão toda é porque o livro em português tá traduzido errado…

Tem que dá uma olhada na versão em Inglês do livro.

Até mais!

a C está correta sim

Na linha 26 a assertiva NAO está sendo usada apropriadamente, porque está avaliando o valor de uma variavel recebida como PARAMETRO, de um método PUBLIC

quando a variavel é um paramentro de um metodo public, não convem avaliar com assertiva, e sim lançar IllegalArgumentException

Observe que na linha 31 ESTA SIM sendo usada apropriadamente, pois ele está avaliando uma variavel q foi recebida como parametro, porem o metodo é PRIVATE, ai sim é apropriado avaliar com a assertva e não lançar IllegalArgumentException.

[quote=javando]a C está correta sim

Na linha 26 a assertiva NAO está sendo usada apropriadamente, porque está avaliando o valor de uma variavel recebida como PARAMETRO, de um método PUBLIC

quando a variavel é um paramentro de um metodo public, não convem avaliar com assertiva, e sim lançar IllegalArgumentException

Observe que na linha 31 ESTA SIM sendo usada apropriadamente, pois ele está avaliando uma variavel q foi recebida como parametro, porem o metodo é PRIVATE, ai sim é apropriado avaliar com a assertva e não lançar IllegalArgumentException.[/quote]

Concordo contigo javando.

a letra é a propriada, segundo a resposta do killer está correta, e tem questoes bem semelhante do o assunto, parece que o killer copiou de la… a questao é que o default nunca será executado nessa estrutura a partir do momento que vc tem o valor de x, agora se vc nao tem o valor de x, fosse digitado pelo usuario, nao seria apropriado, ja que assert nao pode causa efeitos colaterais, isso é outra regra tb importante.

Eu fiz ate o post sobre o assunto.

assertiva

flw, bons estudos :smiley: