【发布时间】:2009-03-30 13:04:58
【问题描述】:
我正在编写一个需要从 Web 服务器获取一些数据的 iPhone 应用程序。我正在使用NSURLConnection 执行 HTTP 请求,效果很好,但在响应包含 HTTP 错误代码(如 404 或 500)的情况下,我无法对代码进行单元测试。
当服务器返回错误时,连接不会在委托上调用connection:didFailWithError:,而是调用connection:didReceiveResponse:、connection:didReceiveData: 和connectionDidFinishLoading:。我目前正在检查connection:didReceiveResponse: 中响应的状态代码,并在状态代码看起来像错误时在连接上调用cancel,以防止调用connectionDidFinishLoading:,从而报告成功的响应。
提供静态存根 NSURLConnection 很简单,但我希望我的测试在调用模拟连接的方法之一时改变它的行为。具体来说,我希望测试能够判断代码何时在模拟连接上调用了cancel,因此测试可以停止在委托上调用connection:didReceiveData: 和connectionDidFinishLoading:。
有没有办法让测试判断 cancel 是否已在模拟对象上调用?有没有更好的方法来测试使用NSURLConnection 的代码?有没有更好的方法来处理 HTTP 错误状态?
【问题讨论】:
-
您介意展示一些示例代码,说明您如何对 NSURLConnection 的调用进行单元测试吗?
标签: iphone objective-c cocoa-touch ocmock