建议使用NSOperations和Coredata在iOS应用程序中测试API请求层

我开发了一个使用REST API的iOS应用程序. iOS应用程序在工作线程中请求数据,并将解析结果存储在核心数据中.所有视图都使用核心数据来显示信息. REST API快速变化,我没有真正的控制界面.

我正在寻找如何为应用程序进行集成测试尽可能简单的建议.我应该测试API还是针对Mock数据?但是如果您可以使用POST创建资源或使用PUT修改资源,那么如何正确地模拟GET请求?

您为这些问题使用了哪些框架?我玩了Frank,看起来不错,但由于UI应用程序中的UI快速更改而复杂.您应该如何测试应用中的“API请求图层”?工作线程是队列中的NSOperations – 一切都是异步构建的.任何建议?

解决方法

我强烈建议你嘲笑服务器.服务器下降,行为发生变化,如果测试失败意味着“也许我的代码仍然可行”,您的手上有问题,因为您的测试并不告诉您代码是否损坏点.

至于如何模拟服务器,进行单元测试:

first_results = list_things()
delete_first_thing()
results_after_delete = list_thing()

我有一个模拟数据结构,如下所示:

{ list_things_request : [first_results,results_after_delete],delete_thing_request: [delete_thing_response] }

它是您的请求的关键,该值是针对该请求的一系列响应,按照它们被看到的顺序.因此,您可以支持重复运行相同的请求(如列出的东西)并获得不同的结果.我使用这种格式,因为在我的情况下,我的API调用有可能以与上次稍微不同的顺序运行.如果您的测试更简单,您可能可以使用一个简单的请求/响应对列表.

我的单位测试中有一个标志,表明我是否处于“记录”模式(即与真实的服务器通话并将此数据结构记录到磁盘),或者如果我处于“播放”模式(与数据结构对话).当我需要测试时,我会记录与服务器的交互,然后再播放.

我使用一些鲜为人知的SenTestCaseDidStartNotification来跟踪哪个单元测试正在运行,并且隔离我的数据文件.

要牢记的另一件事是,不稳定是所有邪恶的根源.如果您有代码可以使用集合执行任何操作,或者获取当前日期,那么这样做会改变请求和响应,这在离线情况下不起作用.所以要小心那些.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...