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 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...
随机推荐
- (转) IPv6相关RFC
转自http://blog.csdn.net/lucien_cc/article/details/12688477 IPv6 Spec RFC 2460 : Internet Protocol, Ve ...
- 栈stack的C实现
头文件—————————————————————————— #ifndef _STACK_H_ #define _STACK_H_ #include <stdlib.h> #define ...
- spring 配置多个数据源的文件
<?xml version="1.0" encoding="UTF-8"?><!-- Repository and Service layer ...
- 想从事分布式系统,计算,hadoop等方面,需要哪些基础,推荐哪些书籍?--转自知乎
作者:廖君链接:https://www.zhihu.com/question/19868791/answer/88873783来源:知乎 分布式系统(Distributed System)资料 < ...
- 【转载】debian上快速搭建ftp
转载自:http://suifengpiaoshi.diandian.com/post/2012-05-05/17955899 搭建ftp 包括搭建ftp服务器和ftp客户端 本文以debian上搭建 ...
- Hadoop入门进阶课程1--Hadoop1.X伪分布式安装
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- 50 Android Hacks阅读笔记
Hack 1.善用weightSum和layout_weight. 问题提出:尝试做一个button的宽度是父View的一半的效果. 关键词:weightSum = 1 , layout_weight ...
- [Perl]抓取个人的所有闪存+格式化保存为文本
以下代码保存为utf8文本格式 环境:ActivePerl v5.16 built for MSWin32-x86 两个要调整的地方: for my $i (17..45) { 这里改成自己对应的页 ...
- MVC,布局页面
一>>> 在_ViewStart.cshtml文件中,加入: @{ Layout = "~/Views/Shared/_Layout.cshtml"; PageD ...
- 从P6 EPPM 8 R3 到P6 EPPM 16 R1 有哪些改变?
Product 特征 First Release for Feature P6 EPPM 通过编辑活动标识替换关系.当你需要修改一个关系,你不需要删除现有的关系,并作出一个新的,你可以简单地编辑活动的 ...