8
respostas

Erro no teste

Eu estou em um projeto e preciso efetuar testes em uma classe como essa, porém não está rolando, sempre na hora de obter a instancia na classe Cliente, na linha " final ClienteDelegate consulta = new ClienteDelegate();"

Alguem poderia me dar uma luz pra como eu conseguir fazer ele pegar a instancia na classe Delegate? Obrigado

@RunWith(MockitoJUnitRunner.class)
public class AgenciaEncerradaAbsorvedoraTest {

    @InjectMocks
    private Cliente cliente;

    @Test
    public void deveTestarClientes() throws AgenciaException{

        ClienteDelegate delegate = Mockito.mock(ClienteDelegate.class);

        List<TelefoneVO> telefone = Arrays.asList(new TelefoneVO("11911111111");


         Mockito.when(delegate.listarTelefones()).thenReturn(telefone);

         cliente.carregaTelefone();
    }
}

public class Cliente implements Serializable {
    public List<TelefoneVO> carregaTelefone() {

        try {
            final ClienteDelegate consulta = new ClienteDelegate();
            listaTelefones = consulta.listarTelefones();
        } catch (final Exception ex) {
            listaTelefones = null;
            Cliente.log.error("\nNão foi possível carregar a lista de agencias \n", ex);
        }
        return listaTelefones;
    }
}    
public class ClienteDelegate {

    private static final Logger log = Logger.getLogger(ClienteDelegate.class);

    @EJB
    private ClienteBean cliente;

    public ClienteDelegate() throws AgenciaException, Exception {

        try {
            this.cliente = (ClienteBean) ServiceLocator.getInstance()
                    .lookup(EJBNameVO.PATH + EJBNameVO.CLIENTE);
        } catch (NamingException e) {
            log.error("Delegate: Não foi possível obter uma instancia do Session "
                    + EJBNameVO.CLIENTE + " no construtor default devido ao seguinte erro", e);
            throw new AgenciaException("Delegate: NamingException, não foi possível obter uma instancia do Session "
                    + EJBNameVO.CLIENTE + " no construtor default devido ao seguinte erro", e);
        }
    }

    public List<TelefoneVO> listarAgencias() throws AgenciaException {
        List<TelefoneVO> telefones = new ArrayList<TelefoneVO>();

        try {
            telefones = this.telefones.listarAgencias();
        } catch (Exception e) {
            log.error("Delegate: Não foi possível a consulta da lista, erro: ", e);
            throw new AgenciaException(
                    "Delegate: Não foi possível a consulta a lista, erro: ", e);
        }
        return telefones;
    }
}    
8 respostas

Que erro que está dando?

Ele caiu no NamingException da classe ClienteDelegate. Que não foi possível obter uma instancia do Session

Tenta jogar o método como static pra não precisar instanciar pra ver se resolve.

Sem sucesso, tinha que conseguir um jeito de mockar o construtor do ClienteDelegate =/

Deixa eu ver se entendi, você quer que quando chame a lista ele te devolva uma outra lista que você construiu, correto? Se for é só você mockar a classe que executa esse método e usar o whene thenReturn do Mockito para retornar sua lista. Vê se dá certo.

Entao, mas a lista ja esta mockado, quando eu chamo o listar, coloco a lista que criei. O problema esta no Delegate, no teste ele da ok, mas quando entro na classe Client

@RunWith(MockitoJUnitRunner.class)
public class AgenciaEncerradaAbsorvedoraTest {

    @InjectMocks
    private Cliente cliente;

    @Test
    public void deveTestarClientes() throws AgenciaException{

        ClienteDelegate delegate = Mockito.mock(ClienteDelegate.class);

        List<TelefoneVO> telefone = Arrays.asList(new TelefoneVO("11911111111");


         Mockito.when(delegate.listarTelefones()).thenReturn(telefone);

         cliente.carregaTelefone();
    }
}

Então, mas o mock da lista eu ja fiz, o problema esta quando o teste entra na Classe Cliente e passa na linha

try {final ClienteDelegate consulta = new ClienteDelegate();

Que ai ele tenta instanciar esse cara e o erro ja acontece, mesmo eu tendo colocado como " ClienteDelegate delegate = Mockito.mock(ClienteDelegate.class);", na minha classe de teste

@InjectMocks
    private Cliente cliente;

    @Test
    public void deveTestarClientes() throws AgenciaException{

        ClienteDelegate delegate = Mockito.mock(ClienteDelegate.class);

        List<TelefoneVO> telefone = Arrays.asList(new TelefoneVO("11911111111");


         Mockito.when(delegate.listarTelefones()).thenReturn(telefone);

         cliente.carregaTelefone();
    }

Hum, tenta tirar o final do código e vê se roda.