[RESOLVIDO] JUnit para exceptions!  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
jopss
Java Ninja
[Avatar]

Membro desde: 13/07/2006 18:32:16
Mensagens: 281
Localização: Campo Grande/MS
Offline

Olá... estou estudando o JUnit e me deparei com um caso de teste simples, mas que não estou conseguindo implementar. Pesquisei e não achei tbm, pelo menos não como quero.

Tenho uma classe Produto que não pode aceitar valores nulos como ID.
Então no setId eu lanço uma exceção caso o valor passado seja null.

Mas como faço o teste para validar isso?
Estou fazendo assim:



Sendo CommunityFieldsErrorException a exceção que lanço.
E prod meu objeto Produto setado no setUp.

Isso causa exceção no console, e o teste diz que passou.
Mas, se eu tirar o @Test, tbm mostra que passou!! Então está validando ou nao??

Como poderia testar se o setId lançou uma exceção por ter passado valor nulo?

vlww
jopss

This message was edited 2 times. Last update was at 10/04/2008 14:33:35

Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

O primeiro passo seria retirar o tratamento try/catch, se você está esperando que a exception seja lançada, então não deve tratar ela.

Mas teoricamente ele deveria não passar no teste pois você capturou a exceção.

This message was edited 1 time. Last update was at 10/04/2008 12:30:12


------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

O teste está certo apenas retire o try/catch
(P.S. Retire o system.out.print também)

This message was edited 1 time. Last update was at 10/04/2008 12:26:08


Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

O ex.printStackTrace() não causa uma exceção no console. Só imprime.

A exceção ocorrida é tratada no catch, impressa e então descartada. Como vc não lança a exceção para o JUnit, seu teste falha.
Isso mostra o quão nocivo é descartar exceções dessa forma.

Se você quiser capturar a exceção crítica para gerar um log, mas não perde-la, pode fazer:



Imprimir a exceção não é uma boa forma de log. Aliás, nem sempre essa á uma boa prática.
Entre no blog do Sergio, e dá uma lida nos artigos de exceções. São muito bons.

This message was edited 1 time. Last update was at 10/04/2008 13:05:09


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
jopss
Java Ninja
[Avatar]

Membro desde: 13/07/2006 18:32:16
Mensagens: 281
Localização: Campo Grande/MS
Offline

O ex.printStackTrace() não causa uma exceção no console. Só imprime.

A sim, acho que me expressei mal...

Funfo, mas só uma dúvida. Faço isso:



E ele me lança:


Opa! Mostrou a exceção e tal... "model.Product - setId == null" é a mensagem da minha exception.

Mas verifiquei que se eu comentar o @Test, faz a mesma saída! Então dá na mesma inserir a exceção na annotação @Test e não inserir nada?

No caso eu queria algo que verificasse a exceção lançada e "passasse no teste" caso tal exceção ocorresse. Ou estou pensando errado?

jopss

This message was edited 1 time. Last update was at 10/04/2008 14:03:56

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não, inserir na anotação deveria fazer o comportamento que você disse, o teste passar quando a exceção for lançada...

engraçado, eu uso isso aqui direto e sempre funciona. Tem certeza que vc está capturando a mesma exceção? Do mesmo pacote?

This message was edited 1 time. Last update was at 10/04/2008 14:05:37


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
jopss
Java Ninja
[Avatar]

Membro desde: 13/07/2006 18:32:16
Mensagens: 281
Localização: Campo Grande/MS
Offline

Opa! descobri o erro. Eu estava misturando códigos de versões diferentes. Passei a usar somente as anotações do JUnit 4 e funfo do geito que queria!

Pra quem passa por aqui e estiver duvidas, siga esta pagina e não tem erros:
http://junit.sourceforge.net/doc/cookbook/cookbook.htm

vlw a todos!!

jopss
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team