Как лучше всего смоделировать сервер для тестирования при использовании квадратного фреймворка .
Возможные способы:
Создайте нового клиента модернизации и установите его в RestAdapter.Builder (). SetClient (). Это включает в себя синтаксический анализ объекта Request и возврат json в качестве объекта Response.
Реализуйте этот аннотированный интерфейс как фиктивный класс и используйте его вместо версии, предоставленной RestAdapter.create () (не тестируйте сериализацию gson)
?
В идеале я хочу, чтобы имитируемый сервер предоставлял ответы json, чтобы я мог одновременно протестировать сериализацию gson.
Приветствуются любые примеры.
square-oss
? Это кажется лишнимretrofit
.Ответы:
Mock Retrofit 2.0: запросы на тестирование
Поскольку старые механизмы, такие как создание
MockClient
класса и его реализацияClient
, больше не работают с Retrofit 2.0, здесь я описываю новый способ сделать это. Все, что вам нужно сделать сейчас, это добавить свои собственные перехватчики для OkHttpClient, как показано ниже .FakeInterceptor
класс просто переопределяетintercept
метод и в случае, если приложение находится вDEBUG
режиме, возвращает данный JSON.RestClient.java
IRestService.java
FakeInterceptor.java
Исходный код проекта на GitHub
источник
uri()
недостаткаchain.request().uri()
(я исправил это, такString url = chain.request().url().toString();
как мой случай отличается). 2- Я получаюjava.lang.IllegalStateException: network interceptor my.package.name.FakeInterceptor must call proceed() exactly once
. Я добавил этоaddNetworkInterceptor()
вместоaddInterceptor()
.Я решил попробовать способ 1 следующим образом
И используя его:
Он работает хорошо и позволяет вам тестировать ваши json-строки без необходимости связываться с реальным сервером!
источник
IllegalArgumentException url == null
вызывал ошибку с помощью Retrofit 1.4.1.builder.setEndpoint("http://mockserver.com").setClient(new MockClient());
Тестирование десериализации JSON для ваших объектов (предположительно с помощью
TypeAdapters
?) Кажется отдельной проблемой, требующей отдельных модульных тестов.Лично пользуюсь версией 2. Он предоставляет типобезопасный, удобный для рефакторинга код, который можно легко отлаживать и изменять. В конце концов, какой толк в объявлении вашего API интерфейсами, если вы не создаете их альтернативные версии для тестирования! Полиморфизм для победы.
Другой вариант - использовать Java
Proxy
. Фактически, Retrofit (в настоящее время) реализует свое базовое HTTP-взаимодействие. Это, по общему признанию, потребует больше работы, но позволит создать гораздо более динамичные макеты.источник
Вы также можете использовать что-то вроде Webservermock от Squareup! -> https://github.com/square/okhttp/tree/master/mockwebserver
источник
Я большой поклонник Apiary.io за насмешку над API перед переходом на настоящий сервер.
Вы также можете использовать плоские файлы .json и читать их из файловой системы.
Вы также можете использовать общедоступные API, такие как Twitter, Flickr и т. Д.
Вот еще несколько замечательных ресурсов о модернизации.
Слайды: https://docs.google.com/presentation/d/12Eb8OPI0PDisCjWne9-0qlXvp_-R4HmqVCjigOIgwfY/edit#slide=id.p
Видео: http://www.youtube.com/watch?v=UtM06W51pPw&feature=g-user-u
Пример проекта: https://github.com/dustin-graham/ucad_twitter_retrofit_sample
источник
Издевательство (отказ от ответственности: я автор) было разработано как раз для этой задачи.
Mockery - это библиотека имитации / тестирования, ориентированная на проверку сетевых уровней со встроенной поддержкой Retrofit. Он автоматически генерирует тесты JUnit на основе спецификаций данного Api. Идея состоит в том, чтобы не писать вручную какой-либо тест; ни реализация интерфейсов для имитации ответов сервера.
источник
Сначала создайте интерфейс для модернизации.
Ваш запросчик в следующем:
Если вы используете второй вариант (используйте интерфейс Retrofit для данных Mock-сервера), вам необходимо MockRetrofit, используйте следующий код:
4. Мои данные взяты из файла актива (Asset / server / EventList.json), содержимое этого файла:
5.Если вы используете перехватчик okhttp3, вам потребуется самоопределенный перехватчик, например:
6. Наконец, вы можете запросить свой сервер с помощью кода:
Спасибо за прочтение.
источник
Добавляя к ответу @Alec, я расширил фиктивный клиент, чтобы получать ответ непосредственно из текстового файла в папке с ресурсами в зависимости от URL-адреса запроса.
Ex
Здесь макет-клиент понимает, что активирован URL-адрес, и ищет файл с именем activate.txt в папке с ресурсами. Он считывает содержимое из файла assets / activate.txt и отправляет его в качестве ответа API.
Вот расширенный
MockClient
Для подробного объяснения вы можете проверить мой блог
http://www.cumulations.com/blogs/13/Mock-API-response-in-Retrofit-using-custom-clients
источник
MockClient
файле написал тестовый класс с использованием robolectric. Но я не могу получить ответ от файла json.JSONPlaceholder: поддельный онлайн-API REST для тестирования и прототипирования
https://jsonplaceholder.typicode.com/
ReqresIn: еще один онлайн-API REST
https://reqres.in/
Почтальон макет сервера
Если вы хотите протестировать настраиваемую полезную нагрузку ответа, два приведенных выше могут не соответствовать вашим требованиям, тогда вы можете попробовать почтовый сервер макета. Его довольно легко настроить, и он позволяет гибко определять свои собственные данные запроса и ответа.
https://learning.getpostman.com/docs/postman/mock_servers/intro_to_mock_servers/ https://youtu.be/shYn3Ys3ygE
источник
Мокинг вызовов API с помощью Retrofit теперь еще проще с Mockinizer, что делает работу с MockWebServer действительно простой:
Просто создайте карту RequestFilter и MockResponses, а затем подключите ее к своей цепочке построителей OkHttpClient:
Вам не нужно беспокоиться о настройке MockWebServer и т. Д. Просто добавьте свои макеты, все остальное Mockinizer сделает за вас.
(Отказ от ответственности: я являюсь автором Mockinizer)
источник
Для меня пользовательский Retrofit Client великолепен своей гибкостью. Особенно, когда вы используете любую структуру DI, вы можете быстро и просто включить / выключить макет. Я использую собственный клиент, предоставленный Dagger, также в модульных и интеграционных тестах.
Изменить: здесь вы найдете пример имитации модернизации https://github.com/pawelByszewski/retrofitmock
источник