我开发了一个使用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来跟踪哪个单元测试正在运行,并且隔离我的数据文件.
要牢记的另一件事是,不稳定是所有邪恶的根源.如果您有代码可以使用集合执行任何操作,或者获取当前日期,那么这样做会改变请求和响应,这在离线情况下不起作用.所以要小心那些.