2015-02-26 3 views
2

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

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

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

Спасибо!

+0

Это определенно возможно, если бы вы могли опубликовать некоторый код того, что вы настраиваете, было бы намного проще помочь вам устранить неполадки. – cnoon

ответ

5

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

  1. Я обычно есть класс, который «заворачивает» (назовем его Service) базовой сети (API Alamofire, AFNetworking, или просто чистый IOS API). Service, как правило, не имеет гражданства и несет ответственность за то, что звонки «приятнее» для моего приложения.
  2. Для меня Service обычно тесно связан с API REST, который я пытаюсь использовать. Например, если бы я использовал 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, который создается с помощью набора замыканий. Эти закрытия делают настоящую работу, и вы можете поставлять различные блокировки в зависимости от того, подключаетесь ли вы к Интернету или издеваетесь над ней.

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

+0

Спасибо. Я не возвращался к этому некоторое время, но ваш ответ был чем-то вроде того, что я искал – vlin