ClassCastException no jMock

8 respostas
gilsonsbf

Olá pessoal,

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.

O que estou faltando fazer?

Obrigado.

8 Respostas

Lucas_Cavalcanti

qual código exatamente vc gostaria de fazer?

posta aqui o que vc fez pra gente ter uma idéia melhor do que está acontecendo

gilsonsbf

DAO.java

...
public interface DAO {
     public Object getContato(Long id);
}

ContatoDAO.java

...
public class ContatoDAO implements DAO {
      public Object getContato(Long id) {
           Contato contato = new Contato();
           //Consulta os dados a partir do id
           return contato;
      }
}

ContatoController.java

...
public class ContatoController {
  ...
  public ContatoController(ContatoDAO dao) {
     this.dao = dao;
  }
  ...
  public void consultarContato(Long id) {
     Contato contato = new Contato();
     contato = (Contato) dao.getContato(id);
  }
}

ContatoControllerTest.java

...
public class ContatoController {
    private DAO contatoDAO;
    //Cria o mock da classe a partir da sua interface
    ...
    @Test
    public void testaConsultaContato() {
        Long contato = 15;
        pesquisaContato(contato);

        controller.consultaContato(contato);
    }

     //metodo que efetua o mocking
     public void pesquisaContato(final Long id) {
          mockery.checking(new Expectations() {{
              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, :wink:

Criado 20 de setembro de 2010
Ultima resposta 21 de set. de 2010
Respostas 8
Participantes 2