Я пишу приложение для 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?