iOS单元测试1
iOS单元测试1
iOS单元测试分为两种类型的测试:
- 应用测试。应用程序测试可以检查app的代码组件,比如计算机的算术运算的例子。你可以利用应用程序测试来确保你的UI空间控件保持原有位置,并且你的控件和控制器对象能够和对象模型正确地工作。
- 逻辑测试(库测试)。逻辑测试可以检查独立代码的行为是否正确。利用逻辑测试,你可以将整个库的组件放在一起进行测试,通常测试对象是对象和方法。
- 性能测试:所谓性能测试,主要是评估一段代码运行的时间.(自己添加的,个人觉得应该也属于一类测试把)。性能测试的格式:
- (void)testPerformanceExample { [self measureBlock:^{ // Put the code you want to measure the time of here. }]; }
例如要评估一段代码
如何创建测试类?
打开Xcode的导航面板,然后选择测试栏,就是感叹号后面那个。我们会看到左下角有一个加号,点击即可添加测试类。新建的时候需要注意:其中的Subclass of一栏中的父类是XCTestCase。所有测试类都是XCTest框架XCTest类的子类。
我们会看到测试类中有两个方法最常见:
setup
tearDown
这两个方法是必须得。如果类中所有的测试方法都需要相同的代码,你可以定制setUp和tearDown来包含这些代码。
测试执行的流程
在执行测试的过程中,XCTest找到所有继承与XCTestCase的类,为每一个类运行他们的测试代码。对于每个测试类来说,测试开始与运行类setup方法。对于每个测试方法来说,一个新的类实例被创建,它的实例setup方法就会执行。在执行完测试方法之后,实例写在方法。类中这样联系重复执行素有测试方法。
测试方法
测试方法都是以test开头,没有参数,返回值也是void。注意:必须是以test开头,否则测试无法执行该方法。
常用测试框架
常用的iOS单元测试框架有OCUnit、GHUnit和OCMock。(还有苹果如今自带的XCTest,不知道对不对)
XCTest断言
断言的概念:例如我们写一个测试方法,如果里面的测试满足条件,那么就是通过了,否则失败。在单元测试中,这个过程叫做断言。
断言分为:无条件报错、等价测试、nil测试、布尔测试以及异常测试。
执行测试的方法:
- 第一种:你可以在测试面板将鼠标悬停在测试类、测试束或者方法名上,然后出现run按钮,就可以运行某个特定的测试,在不同的束或类或方法上运行不同的测试。
- 也可以Product--->test.(快捷键为command+U)。这样会执行所有的测试。
- 另外在Product--->perform action里面也有好多提供的测试。读者可以自行研究。
查看测试
我们可以在日志导航面板,就是导航面板最后一个标签(类似于发送消息的那个),然后这里我们可以看到所有测试,然后选择Logs,便可以看出测试相关的内容。
另外,我们也可以在控制台直接看到测试输出。
在测试输出的结果中,Test Suite是指测试用例集合;Test Case是指测试用例
具体的测试调试工具
在导航面板中,有一个类似于箭头的标签,在消息那个左边。我们可以点击左下方的加号来添加测试失败断点。这样当遇到失败断言,这个断点会终止测试行为。可以让你定位到测试失败的地方。
基于Server的持续集成测试
Xcode测试可以使用Xcode Server进行自动化测试。
Xcode Server可以自动化应用程序的构建、分析、测试以及归档的一体化过程。它的优点如下:
使用服务器可以进行脱机构建和测试,以缓解开发系统做实施和调试的压力,特别是在全方位测试时可能需要很长的时间来执行。
开发团队的所有成员使用相同的scheme可在服务器上运行相同的测试,从而提高测试的一致性,整个团队也可以构建产品,就像构建和测试报告。
你可以灵活调整调度项目需求和团队的需求。比如,当团队中任意一个成员向源码管理系统提交新工作或者在设定的时间定期提交时测试运行就可以开始了。测试运行也可以按照需要手动启动。
服务器以同样的方式反复运行测试。随着时间的推移,服务器的报告可以让你和你的团队对构建过程中的问题、警告以及测试解决方案有个整体的轮廓。
你的项目可以有更多的目的地进行测试,更具自动性,而且比手动运行测试系统更加经济。例如,您可以有任意数量的iOS设备连接到服务器,使用单一的配置,该系统可以构建和测试库、应用程序、所有测试以及iOS模拟器的多个版本。
我们需要先了解一些关于Xcode Server所用的关键术语:
- scheme:构建计划。
OCUnit过渡到XCTest
从OCUnit过渡到XCTest是一个复杂操作,包括更新源文件、其中包括测试类和修改项目配置设置。在新版Xcode中有一个转换工作流程助手可以帮助转换:
Edit--->Covert---->ToXCTest这样就可以完成OCUnit到XCTest的转换。
在Xcode中已经内建XCTest,但是它只支持Log输出至Console。
XCTest
支持图形界面测试和真机测试,它继承了OCUnit的优点。
常用的XCT断言
函数名 | 简介 |
---|---|
XCTFail | 无条件断言失败 |
XCTAssertEqualObjects | 当两个对象不相等或者是其中一个对象为nil时,断言失败 |
XCTAssertEquals | 当参数1不等于参数2断言失败,用于C中的基本类型测试 |
XCTAssertNil | 当参数不是nil时,断言失败 |
XCTAssertNotNil | 当参数是nil时断言失败 |
XCTAssertTrue | 当表达式为false时断言失败 |
XCTAssertFalse | 当表达式为true时断言失败 |
XCTAssertThrows | 如果表达式没有抛出异常,则断言失败 |
XCTAssertNoThrows | 如果表达式抛出异常,则断言失败 |
OCUnit
不支持真机测试
OCMock
可以使用伪对象进行测试。
GHUnit
GHUnit支持GUI界面,输出的格式比较美观而且易懂。已经好久不更新了。
功能:
*支持运行测试、跟踪断点以及直接与Xcode Debugger进行交互。
- 并行测试;
- 可测试UI组件;
*可捕获并展示测试细节; - 按照关键字搜索过滤测试案例;
- 根据测试案例查看日志;
- 显示堆栈跟踪和有用的调试信息;
- 在项目中作为框架使用;
- 确定视图是否发生了改变;
- 快速记录view changes
- 安装:
- 通过gem安装GHUnit:sudo gem install ghunit
- 找到项目工程文件的根目录,然后执行:ghunit install -n GHunitTest (这里的GHunitTest就是xxxx.xcworkspace的xxxx)。
- 然后将执行得到的内容添加的Podfile:
target:Test do
pod 'GHUnit'
end
添加之后然后执行pod install。这样就安装成功了。 - 执行玩pod install你会看到在Targets里面有一个Test。如果你有一组测试档案,只要输入ghunit add -n ProjectName -f SimpleTest,ProjectName是你的项目名称,SimpleTest是你想要区的测试名称。
- 介绍会使用到的指令
安装Command Line:ghunit install_cli -n ProjectName
安装模拟器:brew install ios-sim
执行单元测试:ghunit run -n ProjectName
附:
- 参考与:
iOS单元测试1的更多相关文章
- 爱上iOS单元测试系列之爱上她就要先了解她:单元测试入门
前言 对于单元测试一开始我是拒绝的.单元测试是一个什么东东,因为我喜欢做iOS开发是因为喜欢写APP的啊,一切和这一目标不相干的东西我没兴趣啊,所以从事iOS开发几年都没去深入学习过单元测试(主要是之 ...
- iOS单元测试(作用及入门提升)
由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是为了方便测试一些功能是否正常运行,还有调试接口是否能正常使用.有时候你可能是为了测试某 ...
- iOS 单元测试和UI测试教程
原文:iOS Unit Testing and UI Testing Tutorial 作者:Audrey Tam 译者:kmyhy 编写测试不是为了追求刺激,测试是为了避免你崭新的 App 变成了充 ...
- iOS 单元测试(Unit Test 和 UI Test)
之前一直搞过~~最近试了一下下,完美~~ 附上一篇文章,不同的伙伴可以看看: http://www.jianshu.com/p/009844a0b9edUnitTest(简单的单元测试使用) http ...
- XCode下的iOS单元测试
XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit.通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能.本文将演示如何在 ...
- IOS 单元测试
本文转载至 http://blog.csdn.net/fengsh998/article/details/8109293 IOS 自带单元测试. 1.在创建时,将include Unit Tests钩 ...
- IOS单元测试,OCMock
1.环境搭建 使用官方推荐,手动搭建.. 1.下载所需文件 http://ocmock.org/download/ 根据自己的需要下载不同的版本. 打开iOS library文件夹,里面就有需要用到的 ...
- iOS单元测试
参考下面的链接 ,写的还不错 http://gaohaijun.blog.163.com/blog/static/176698271201151052325749/
- 【iOS】单元测试
iOS单元测试(作用及入门提升) 字数1704 阅读16369 评论26 喜欢247 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...
随机推荐
- 《Programming with Objective-C》第八章 Working with Blocks
Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDicti ...
- 在ASP.NET开发中容易忽略的2个小问题
本文地址:http://www.cnblogs.com/outtamyhead/p/3642729.html,转载需保留本地址. 最近在我的MVC项目中出现了两个非常小,但是往往惹出大麻烦的问题,借中 ...
- 关于MySQL的Admin Ping Command
前言: 最近在线上诊断QPS飙升的过程中深入进行了下Admin Ping Command的测试.此外,再一些国外文章中最近也读到了一些相关知识,所以写成一篇博文做一下总结. 1. 关于Admin Pi ...
- [转载]AxureRP 7超强部件库下载
很多刚刚开始学习Axure的朋友都喜欢到网上搜罗各种部件库(组件库)widgets library ,但是网络中真正实用的并且适合你使用的少之又少,最好的办法就是自己制作适合自己工作内容的部件库. 这 ...
- NPTL 线程同步方式
NPTL提供了互斥体 pthread_mutex_t 类型进行线程同步,防止由于多线程并发对全局变量造成的不正确操作.使用 pthread_mutext_t 对数据进行保护已经可以实现基本的数据同步, ...
- webpack实战
webpack实战 30分钟手把手教你学webpack实战 2015-09-08 23:02 by 龙恩0707, 175 阅读, 0 评论, 收藏, 编辑 30分钟手把手教你学webpack实战 阅 ...
- Android程序ToDoList增加配置项页面
本文要做的事情就是在前面做的简单的ToDoList程序上增加一个配置项页面(Reference).这个Reference页面也非常简单: 这个ToDoList现在有两个页面,主页面能填写待办事项,然后 ...
- .Net魔法堂:AssemblyInfo.cs文件详解
一.前言 .net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件.但我们实际上通过另一个形式操作该文件.那就是通过在鼠标右键点 ...
- android SQLite(安卓数据库的插入显示删除)
1.利用android自带数据库实现增加.删除.显示用户等操作 只是一个基本模型,为即将的与 复利计算apk整合做牺牲. 就不上传百度云供大家下载了 等整合了复利计算再上传. 数据的插入和显示: ...
- Mybatis 示例之 SelectKey
SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式. 不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦. sel ...