Заглушка HTTP-запросов в Swift
Я использую Swift для iOS-приложения и использую Alamofire для выполнения HTTP-запросов.
Я хочу написать модульные тесты, чтобы охватить мои функции, но у меня возникают проблемы с блокировкой HTTP-запросов, выполняемых Alamofire. Я использую Nocilla (импортированную в заголовок моста), чтобы попытаться заблокировать мои HTTP-запросы, но кажется, что обратный вызов моего HTTP-запроса никогда не достигается в тестах.
Мне было интересно, есть ли у кого-нибудь опыт успешного добавления HTTP-запросов для Alamofire в их тестовые наборы?
Спасибо!
1 ответ
У меня нет, но это общий шаблон, который я использую для модульного тестирования HTTP-запросов (в частности, для вызова REST API). Я успешно использовал это как для Alamofire, так и для AFNetworking.
- У меня обычно есть класс, который "оборачивает" (давайте назовем это
Service
) базовые сетевые API (Alamofire, AFNetworking или просто чистые API для iOS).Service
как правило, не имеет состояния и отвечает за то, чтобы звонки были "приятнее" для моего приложения. - Для меня,
Service
обычно тесно связан с REST API, который я пытаюсь использовать. Например, если я использовал REST API, который позволил мне POST кPerson
Коллекция, я бы API, какService.PostPerson
,Service.GetPerson
, так далее. - Мои классы приложений (обычно контроллеры), которые используют
Service
и обычно используютinversion of control
создаватьService
, - В моих модульных тестах я поставляю
UnitTestService
так что мои занятия в конечном итоге использовать экземплярUnitTestService
вместо экземпляраService
, - Проще говоря, мой
UnitTestService
обычно возвращает жестко закодированные ответы JSON в зависимости от конфигурации. Таким образом, в приведенном выше примере, я бы получил жестко закодированный ответ JSON дляService.PostPerson
,
Я использовал несколько методов, чтобы сделать это:
- Есть протокол
ServiceProtocol
что обаService
а такжеUnitTestService
воплощать в жизнь - Есть один
Service
это создается с помощью набора замыканий. Эти замыкания выполняют настоящую работу, и вы можете предоставлять разные замыкания в зависимости от того, подключаетесь ли вы к Интернету или издеваетесь над ним.
Поскольку у меня есть некоторый опыт функционального программирования, мне нравится последнее. Но обе техники работают.