solucion restaurar para pagina estado error codigos codigo iphone objective-c cocoa-touch ocmock

iphone - restaurar - http error 302 solucion



Probar el uso de NSURLConnection con los estados de error de respuesta HTTP (1)

Estoy escribiendo una aplicación para iPhone que necesita obtener algunos datos de un servidor web. Estoy usando NSURLConnection para hacer la solicitud HTTP, que funciona bien, pero tengo problemas para que la unidad pruebe mi código en el caso de que la respuesta tenga un código de error HTTP (como 404 o 500).

Estoy usando GTM para pruebas unitarias y OCMock para burlarse.

Cuando el servidor devuelve un error, la conexión no llama a connection:didFailWithError: en el delegado, pero llama a connection:didReceiveResponse: connection:didReceiveData: y connectionDidFinishLoading: lugar. Actualmente estoy verificando el código de estado en la respuesta en connection:didReceiveResponse: y llamando a cancel en la conexión cuando el código de estado parezca un error para evitar que se llame a connection:didReceiveResponse: donde se informará una respuesta exitosa.

Proporcionar un NSURLConnection estático es simple, pero quiero que mi prueba cambie su comportamiento cuando se llama a uno de los métodos de la conexión simulada. Específicamente, quiero que la prueba pueda saber cuándo el código ha llamado a cancel en la conexión simulada, para que la prueba pueda detener la connection:didReceiveData: y connectionDidFinishLoading: en el delegado.

¿Hay alguna forma en que las pruebas puedan determinar si se ha llamado a cancel en el objeto simulado? ¿Hay una mejor manera de probar el código que utiliza NSURLConnection ? ¿Hay una mejor manera de manejar los estados de error HTTP?


¿Hay una mejor manera de manejar los estados de error HTTP?

Creo que estás en el camino correcto. Uso algo similar al siguiente código, que encontré here :

if ([response respondsToSelector:@selector(statusCode)]) { int statusCode = [((NSHTTPURLResponse *)response) statusCode]; if (statusCode >= 400) { [connection cancel]; // stop connecting; no more delegate messages NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat: NSLocalizedString(@"Server returned status code %d",@""), statusCode] forKey:NSLocalizedDescriptionKey]; NSError *statusError = [NSError errorWithDomain:NSHTTPPropertyStatusCodeKey code:statusCode userInfo:errorInfo]; [self connection:connection didFailWithError:statusError]; } }

Esto cancela la conexión y llama a connection:didFailWithError: para que los códigos de error de http se comporten exactamente igual que cualquier otro error de conexión.