Заглушка HTTP-запросов в Swift

Я использую Swift для iOS-приложения и использую Alamofire для выполнения HTTP-запросов.

Я хочу написать модульные тесты, чтобы охватить мои функции, но у меня возникают проблемы с блокировкой HTTP-запросов, выполняемых Alamofire. Я использую Nocilla (импортированную в заголовок моста), чтобы попытаться заблокировать мои HTTP-запросы, но кажется, что обратный вызов моего HTTP-запроса никогда не достигается в тестах.

Мне было интересно, есть ли у кого-нибудь опыт успешного добавления HTTP-запросов для Alamofire в их тестовые наборы?

Спасибо!

1 ответ

Решение

У меня нет, но это общий шаблон, который я использую для модульного тестирования HTTP-запросов (в частности, для вызова REST API). Я успешно использовал это как для Alamofire, так и для AFNetworking.

  1. У меня обычно есть класс, который "оборачивает" (давайте назовем это Service) базовые сетевые API (Alamofire, AFNetworking или просто чистые API для iOS). Service как правило, не имеет состояния и отвечает за то, чтобы звонки были "приятнее" для моего приложения.
  2. Для меня, Service обычно тесно связан с REST API, который я пытаюсь использовать. Например, если я использовал REST API, который позволил мне POST к Person Коллекция, я бы API, как Service.PostPerson, Service.GetPerson, так далее.
  3. Мои классы приложений (обычно контроллеры), которые используют Service и обычно используют inversion of control создавать Service,
  4. В моих модульных тестах я поставляю UnitTestService так что мои занятия в конечном итоге использовать экземпляр UnitTestService вместо экземпляра Service,
  5. Проще говоря, мой UnitTestService обычно возвращает жестко закодированные ответы JSON в зависимости от конфигурации. Таким образом, в приведенном выше примере, я бы получил жестко закодированный ответ JSON для Service.PostPerson,

Я использовал несколько методов, чтобы сделать это:

  • Есть протокол ServiceProtocol что оба Service а также UnitTestService воплощать в жизнь
  • Есть один Service это создается с помощью набора замыканий. Эти замыкания выполняют настоящую работу, и вы можете предоставлять разные замыкания в зависимости от того, подключаетесь ли вы к Интернету или издеваетесь над ним.

Поскольку у меня есть некоторый опыт функционального программирования, мне нравится последнее. Но обе техники работают.

Другие вопросы по тегам