2
respostas

Testes Unitários com interface e .execute

Pessoal , bom dia ! Tentei procurar no forum mas não achei nenhum problema parecido. Estou implementando testes unitários num sistema legado onde trabalho. Estou pondo em prática os cursos aqui da Alura , mas tem um problema: tenho uma linha de código que não consigo mocar :

response = cliente.enviar(request).execute();

Essa chamada é para uma interface cliente como abaixo:

public interface Cliente {

@POST("/enviarPapelada")
@Produces("application/json")
Call<Response> enviar(@Body Request request);

Não consigo mocar  "cliente.enviar(request).execute();" o problema parece ser o .execute 

Alguém já passou por algo parecido ?  Agradeço qualquer ajuda. 
2 respostas

Acho que se vc usar o Mockito.doReturn pode funcionar, mas não testei ainda.

E aí, Hevellyn!

Pelo que eu tô sacando, o problema tá no .execute(), né? E parece que o Mockito pode ser a chave aqui. Se tu não testou ainda, vale a pena dar um tiro com o doReturn. Seria algo mais ou menos assim:

when(cliente.enviar(request).execute()).thenReturn(tuaRespostaSimulada);

Lembrando que tuaRespostaSimulada é o que tu quer que volte quando esse método for chamado nos teus testes.

Se rolar mais perrengue, uma abordagem seria criar uma classe "falsa" que implementa a tua interface Call e faz o que tu espera no .execute(). Aí tu trocaria a implementação real pela falsa só nos teus testes.

Se testar o Mockito resolver, massa! Se não, dá um grito aqui que a gente vai ajustando a estratégia.