iOS单元测试1
例如要评估一段代码 如何创建测试类?
打开Xcode的导航面板,然后选择测试栏,就是感叹号后面那个。我们会看到左下角有一个加号,点击即可添加测试类。新建的时候需要注意:其中的Subclass of一栏中的父类是XCTestCase。所有测试类都是XCTest框架XCTest类的子类。
我们会看到测试类中有两个方法最常见:
setup tearDown这两个方法是必须得。如果类中所有的测试方法都需要相同的代码,你可以定制setUp和tearDown来包含这些代码。
测试执行的流程在执行测试的过程中,XCTest找到所有继承与XCTestCase的类,为每一个类运行他们的测试代码。对于每个测试类来说,测试开始与运行类setup方法。对于每个测试方法来说,一个新的类实例被创建,它的实例setup方法就会执行。在执行完测试方法之后,实例写在方法。类中这样联系重复执行素有测试方法。
测试方法都是以test开头,没有参数,返回值也是void。注意:必须是以test开头,否则测试无法执行该方法。
常用测试框架常用的iOS单元测试框架有OCUnit、GHUnit和OCMock。(还有苹果如今自带的XCTest,不知道对不对)
XCTest断言断言的概念:例如我们写一个测试方法,如果里面的测试满足条件,那么就是通过了,否则失败。在单元测试中,这个过程叫做断言。
断言分为:无条件报错、等价测试、nil测试、布尔测试以及异常测试。
我们可以在日志导航面板,就是导航面板最后一个标签(类似于发送消息的那个),然后这里我们可以看到所有测试,然后选择Logs,便可以看出测试相关的内容。
另外,我们也可以在控制台直接看到测试输出。
在测试输出的结果中,Test Suite是指测试用例集合;Test Case是指测试用例
具体的测试调试工具在导航面板中,有一个类似于箭头的标签,在消息那个左边。我们可以点击左下方的加号来添加测试失败断点。这样当遇到失败断言,这个断点会终止测试行为。可以让你定位到测试失败的地方。
基于Server的持续集成测试Xcode测试可以使用Xcode Server进行自动化测试。
Xcode Server可以自动化应用程序的构建、分析、测试以及归档的一体化过程。它的优点如下:
使用服务器可以进行脱机构建和测试,以缓解开发系统做实施和调试的压力,特别是在全方位测试时可能需要很长的时间来执行。
开发团队的所有成员使用相同的scheme可在服务器上运行相同的测试,从而提高测试的一致性,整个团队也可以构建产品,就像构建和测试报告。
你可以灵活调整调度项目需求和团队的需求。比如,当团队中任意一个成员向源码管理系统提交新工作或者在设定的时间定期提交时测试运行就可以开始了。测试运行也可以按照需要手动启动。
服务器以同样的方式反复运行测试。随着时间的推移,服务器的报告可以让你和你的团队对构建过程中的问题、警告以及测试解决方案有个整体的轮廓。
你的项目可以有更多的目的地进行测试,更具自动性,而且比手动运行测试系统更加经济。例如,您可以有任意数量的iOS设备连接到服务器,使用单一的配置,该系统可以构建和测试库、应用程序、所有测试以及iOS模拟器的多个版本。
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|如果表达式抛出异常,则断言失败
不支持真机测试
OCMock可以使用伪对象进行测试。
GHUnitGHUnit支持GUI界面,输出的格式比较美观而且易懂。已经好久不更新了。
功能:
*支持运行测试、跟踪断点以及直接与Xcode Debugger进行交互。
*可捕获并展示测试细节; 按照关键字搜索过滤测试案例; 根据测试案例查看日志; 显示堆栈跟踪和有用的调试信息; 在项目中作为框架使用; 确定视图是否发生了改变; 快速记录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是你想要区的测试名称。
iOS单元测试的那些事儿 作为客户端开发,很多时候我们过多的关注于功能的测试,而忽略标准的单元测试。其实,单元测试是保障项目稳定性的最有效且成本最低的测试方式。越偏向底层服务的代码,越需要使用单元测试来对可靠性进行保障。一旦单元测试覆盖完成,则之后再进行代码优化和迭代的时候则会有引入新问题的几率会大为减小。
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。
相关文章
- (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
- [ IOS ] iOS-控制器View的创建和生命周期
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
- iOS开发之地图与定位
- 如何处理iOS中照片的方向
- iOS设计模式 - 访问者
- Ios开发之 -- js和ios的交互
- ios 多语言支持
- iOS学习之GCD
- 话说好像是这样,ios下面通常用iframe来打开你的scheme地址; Android下通常用location.href来。。。 不过实际情况好像比这个复杂得多。。
- IOS UIActivityIndicatorView(指示控制器)用法总结
- 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市
- iOS swift5 改变UILabel上指定文字的颜色和字体
- iOS 单元测试(UI Testing Bundle, Unit Testing Bundle, Include Tests)
- IOS UIPickView+sqlite 选择中国全部城市案例
- iOS UICollectionView 入门 07 点击cell放大图片
- 软件测试技术之iOS 单元测试—逻辑测试