Eu estou estudando o projeto MyDVD do VRaptor e nos testes unitários com as classes Controller, está usando uma interface para “mockar” o DAO. Só que eu estou querendo implementar um método que retorne dados de um contato encapsulados por uma bean, e esse método implementado ele retorna Object. Com isso tenho que fazer um casting, só que da um ClassCastException quando teste a classe de teste.
...publicclassContatoController{privateDAOcontatoDAO;//Cria o mock da classe a partir da sua interface...@TestpublicvoidtestaConsultaContato(){Longcontato=15;pesquisaContato(contato);controller.consultaContato(contato);}//metodo que efetua o mockingpublicvoidpesquisaContato(finalLongid){mockery.checking(newExpectations(){{one(contatoDAO).pesquisar(nome);}});}}
Lucas_Cavalcanti
onde tá dando o classCast?
gilsonsbf
Na verdade está dando exceção quando executa o método mock, ou seja, o pesquisaContato.
Lucas_Cavalcanti
o que acontece é o seguinte:
seu ContatoController recebe um ContatoDao no construtor, mas vc tah passando pra ele um DAO…
acho que é esse o motivo da exception…
qual é a linha exata que ela acontece?
copia a linha aqui
gilsonsbf
Sim, porque a DAO é implementado por ContatoDAO, sendo que o jMock solitica a criacao de um mock através de uma interface.
Lucas_Cavalcanti
só que pensa assim:
DAO é uma interface é o mock é uma implementação dela, digamos MockDAO.
Seu controller recebe um ContatoDAO, mas vc tah passando um MockDAO que não é um ContatoDAO, ele é só um DAO. Por isso o classCast… entendeu?
tem um jeito de mockar classes concretas com o JMock…
de qqer forma, sugiro que vc dê uma olhada no Mockito (http://mockito.org) que é bem mais fácil de usar.
[]'s
gilsonsbf
Pois é,
Estou ‘mockando’ diretamente de classes concretas mesmo. Obrigado pela ajuda,