当前位置:  开发笔记 > 运维 > 正文

测试NSURLConnection与HTTP响应错误状态的使用

如何解决《测试NSURLConnection与HTTP响应错误状态的使用》经验,为你挑选了1个好方法。

我正在编写一个需要从Web服务器获取一些数据的iPhone应用程序.我正在使用NSURLConnectionHTTP请求,这很有效,但在响应有HTTP错误代码(如404或500)的情况下,我无法对代码进行单元测试.

我正在使用GTM进行单元测试,使用OCMock进行模拟.

当服务器返回一个错误,该连接不会调用connection:didFailWithError:的委托,但呼吁connection:didReceiveResponse:,connection:didReceiveData:以及connectionDidFinishLoading:代替.我正在检查响应中的状态代码connection:didReceiveResponse:cancel在状态代码看起来像一个错误时调用连接以防止connectionDidFinishLoading:被调用,其中将报告成功的响应.

提供静态存根NSURLConnection很简单,但我希望我的测试在调用其中一个模拟连接的方法时改变它的行为.具体来说,我希望测试能够告诉代码何时调用cancel模拟连接,因此测试可以停止调用connection:didReceiveData:connectionDidFinishLoading:代理.

有没有办法让测试判断是否cancel已经在模拟对象上调用了?有没有更好的方法来测试使用的代码NSURLConnection?有没有更好的方法来处理HTTP错误状态?



1> e.James..:

有没有更好的方法来处理HTTP错误状态?

我认为你走在正确的轨道上.我使用类似于以下代码的东西,我在这里找到:

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];
    }
}

这将取消连接,并调用connection:didFailWithError:以使http错误代码与任何其他连接错误完全相同.


您可以使用任何字符串,例如@"Error",而不是NSHTTPPropertyStatusCodeKey
@Clay Bridges:我感受到爱::)谢谢你.所以`domain:`参数实际上只是一个字符串常量,所以错误处理程序可以了解出错的地方.它不必是`NSHTTPPropertyStatusCodeKey`就可以工作,事实上,它不应该是,因为该键已被弃用.我说得对吗?
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有