Я пишу приложение для iPhone, которое должно получить некоторые данные с веб-сервера. Я использую NSURLConnection
для выполнения HTTP-запроса, который работает хорошо, но у меня возникает проблема с тестированием моего кода в случае, когда ответ имеет код ошибки HTTP (например, 404 или 500).
Я использую GTM для модульного тестирования и OCMock для насмешек.
Когда сервер возвращает ошибку, соединение не вызывает connection:didFailWithError:
в делегате, а вызывает connection:didReceiveResponse:
, connection:didReceiveData:
и connectionDidFinishLoading:
. В настоящее время я проверяю код состояния на ответ в connection:didReceiveResponse:
и вызываю cancel
в соединении, когда код состояния выглядит как ошибка, чтобы предотвратить вызов connectionDidFinishLoading:
, где будет сообщен успешный ответ.
Предоставление статического stubbed NSURLConnection
прост, но я хочу, чтобы мой тест изменил его поведение при вызове одного из методов mock connection. В частности, я хочу, чтобы тест мог сказать, когда код вызвал cancel
в макетном соединении, поэтому тест может прекратить вызов connection:didReceiveData:
и connectionDidFinishLoading:
в делегате.
Есть ли способ тестирования, чтобы определить, был ли вызов cancel
на макет объекта? Есть ли лучший способ проверить код, который использует NSURLConnection
? Есть ли лучший способ обработки статусов ошибок HTTP?