Qual é a melhor maneira de simular um servidor para teste ao usar a estrutura quadrada de retrofit .
Formas potenciais:
Crie um novo cliente de retrofit e configure-o no RestAdapter.Builder (). SetClient (). Isso envolve a análise do objeto Request e o retorno do json como um objeto Response.
Implemente esta interface anotada como uma classe simulada e use-a no lugar da versão fornecida por RestAdapter.create () (não testará a serialização gson)
?
O ideal é que o servidor simulado forneça respostas json para que possa testar a serialização gson ao mesmo tempo.
Quaisquer exemplos seriam muito apreciados.
square-oss
? Parece redundante dadoretrofit
.Respostas:
Solicitações de simulação de retrofit 2.0 para teste
Como os mecanismos antigos, como criar
MockClient
classes e implementá-las,Client
não estão mais funcionando com o Retrofit 2.0, aqui eu descrevo uma nova maneira de fazer isso. Tudo o que você precisa fazer agora é adicionar seus interceptores personalizados para OkHttpClient como mostrado abaixo .FakeInterceptor
a classe apenas substitui ointercept
método e, no caso, se o aplicativo estiver noDEBUG
modo, retorne o JSON fornecido.RestClient.java
IRestService.java
FakeInterceptor.java
Código fonte do projeto no GitHub
fonte
uri()
underchain.request().uri()
(eu consertei issoString url = chain.request().url().toString();
porque meu caso é diferente). 2- Estou conseguindojava.lang.IllegalStateException: network interceptor my.package.name.FakeInterceptor must call proceed() exactly once
. Eu adicionei isso emaddNetworkInterceptor()
vez deaddInterceptor()
.Decidi tentar o método 1 da seguinte maneira
E usando-o por:
Ele funciona bem e permite que você teste suas strings json sem ter que entrar em contato com o servidor real!
fonte
IllegalArgumentException url == null
com o Retrofit 1.4.1.builder.setEndpoint("http://mockserver.com").setClient(new MockClient());
Testar a desserialização JSON para seus objetos (presumivelmente com
TypeAdapters
?) Parece um problema separado que requer testes de unidade separados.Eu uso a versão 2 pessoalmente. Ele oferece código seguro para tipos e fácil de refatorar que pode ser facilmente depurado e alterado. Afinal, de que adianta declarar sua API como interfaces se você não está criando versões alternativas delas para teste! Polimorfismo para a vitória.
Outra opção é usar um Java
Proxy
. É assim que o Retrofit (atualmente) implementa sua interação HTTP subjacente. Isso certamente exigirá mais trabalho, mas permitiria simulações muito mais dinâmicas.fonte
Você também pode usar algo como o Webservermock da Squareup! -> https://github.com/square/okhttp/tree/master/mockwebserver
fonte
Eu sou um grande fã do Apiary.io para uma simulação de uma API antes de mudar para um servidor real.
Você também pode usar arquivos .json simples e lê-los do sistema de arquivos.
Você também pode usar APIs de acesso público, como Twitter, Flickr, etc.
Aqui estão alguns outros excelentes recursos sobre Retrofit.
Slides: https://docs.google.com/presentation/d/12Eb8OPI0PDisCjWne9-0qlXvp_-R4HmqVCjigOIgwfY/edit#slide=id.p
Vídeo: http://www.youtube.com/watch?v=UtM06W51pPw&feature=g-user-u
Projeto de exemplo: https://github.com/dustin-graham/ucad_twitter_retrofit_sample
fonte
Zombaria (aviso: eu sou o autor) foi projetado exatamente para essa tarefa.
Mockery é uma biblioteca de simulação / teste focada na validação de camadas de rede com suporte integrado para Retrofit. Ele gera automaticamente testes JUnit com base nas especificações de um determinado Api. A ideia é não ter que escrever manualmente nenhum teste; nem implementar interfaces para simular respostas do servidor.
fonte
Primeiro, crie sua interface de Retrofit.
Seu solicitante a seguir:
Se você estiver usando a segunda escolha (use a interface de Retrofit para dados do servidor Mock), você precisa MockRetrofit, use o código a seguir:
4. Meus dados são do arquivo de ativos (Asset / server / EventList.json), o conteúdo deste arquivo é:
5.Se você estiver usando o interceptor okhttp3, você precisa se auto-definir o interceptor, como este:
6. Por fim, você pode solicitar seu servidor com o código:
Obrigado pela leitura.
fonte
Adicionando à resposta de @Alec, estendi o cliente simulado para obter a resposta diretamente de um arquivo de texto na pasta de ativos, dependendo da URL de solicitação.
Ex
Aqui, o cliente simulado entende que a URL que está sendo disparada está ativa e procura um arquivo chamado activate.txt na pasta de ativos. Ele lê o conteúdo do arquivo assets / activate.txt e o envia como resposta para a API.
Aqui está o estendido
MockClient
Para obter uma explicação detalhada, você pode conferir meu blog
http://www.cumulations.com/blogs/13/Mock-API-response-in-Retrofit-using-custom-clients
fonte
MockClient
arquivo, escrevi uma classe de teste usando robolectric. Mas não consigo obter nenhuma resposta do arquivo json.JSONPlaceholder: API REST online falsa para teste e prototipagem
https://jsonplaceholder.typicode.com/
ReqresIn: outra API REST online
https://reqres.in/
Servidor simulado Postman
Se você quiser testar a carga útil de resposta personalizada, os dois acima podem não atender às suas necessidades, então você pode tentar o servidor simulado do postman. É muito fácil de configurar e flexível para definir sua própria solicitação e carga útil de resposta.
https://learning.getpostman.com/docs/postman/mock_servers/intro_to_mock_servers/ https://youtu.be/shYn3Ys3ygE
fonte
Zombar de chamadas de API com o Retrofit agora é ainda mais fácil com o Mockinizer, que torna o trabalho com o MockWebServer realmente simples:
Basta criar um mapa de RequestFilter e MockResponses e, em seguida, conectá-lo à cadeia de construtores OkHttpClient:
Você não precisa se preocupar em configurar o MockWebServer etc. Basta adicionar seus mocks, todo o resto é feito pelo Mockinizer para você.
(Isenção de responsabilidade: eu sou o autor do Mockinizer)
fonte
Para mim, o cliente de retrofit personalizado é ótimo por causa da flexibilidade. Especialmente quando você usa qualquer framework de DI, você pode ligar / desligar o mock de maneira rápida e simples. Estou usando o cliente personalizado fornecido pela Dagger também em testes de unidade e integração.
Edit: Aqui você encontra um exemplo de retrofit de simulação https://github.com/pawelByszewski/retrofitmock
fonte