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
  1. 安装:

    • 通过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是你想要区的测试名称。
  2. 介绍会使用到的指令
    安装Command Line:ghunit install_cli -n ProjectName
    安装模拟器:brew install ios-sim
    执行单元测试:ghunit run -n ProjectName

附:

iOS单元测试1的更多相关文章

  1. 爱上iOS单元测试系列之爱上她就要先了解她:单元测试入门

    前言 对于单元测试一开始我是拒绝的.单元测试是一个什么东东,因为我喜欢做iOS开发是因为喜欢写APP的啊,一切和这一目标不相干的东西我没兴趣啊,所以从事iOS开发几年都没去深入学习过单元测试(主要是之 ...

  2. iOS单元测试(作用及入门提升)

    由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是为了方便测试一些功能是否正常运行,还有调试接口是否能正常使用.有时候你可能是为了测试某 ...

  3. iOS 单元测试和UI测试教程

    原文:iOS Unit Testing and UI Testing Tutorial 作者:Audrey Tam 译者:kmyhy 编写测试不是为了追求刺激,测试是为了避免你崭新的 App 变成了充 ...

  4. iOS 单元测试(Unit Test 和 UI Test)

    之前一直搞过~~最近试了一下下,完美~~ 附上一篇文章,不同的伙伴可以看看: http://www.jianshu.com/p/009844a0b9edUnitTest(简单的单元测试使用) http ...

  5. XCode下的iOS单元测试

    XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit.通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能.本文将演示如何在 ...

  6. IOS 单元测试

    本文转载至 http://blog.csdn.net/fengsh998/article/details/8109293 IOS 自带单元测试. 1.在创建时,将include Unit Tests钩 ...

  7. IOS单元测试,OCMock

    1.环境搭建 使用官方推荐,手动搭建.. 1.下载所需文件 http://ocmock.org/download/ 根据自己的需要下载不同的版本. 打开iOS library文件夹,里面就有需要用到的 ...

  8. iOS单元测试

    参考下面的链接 ,写的还不错 http://gaohaijun.blog.163.com/blog/static/176698271201151052325749/

  9. 【iOS】单元测试

    iOS单元测试(作用及入门提升) 字数1704 阅读16369 评论26 喜欢247 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...

随机推荐

  1. UIView 与 CALayer

    联系: 1. UIView 有个属性 layer,可以返回它的主 CALayer 实例:CALayer *layer = myView.layer 2. 一个 UIView 可以有多个 CALayer ...

  2. 实例演示 kino.razor (前端 Javascript 模板工具,Razor 风格)的使用

    前言 对于习惯了 ASP.NET MVC Razor 模板引擎的人来说,比如我,一直在寻找前端 Javascript 端的 Razor 模板工具.这之前,我也了解到很多Javascript 端的模板工 ...

  3. 不同gdb,相同数据集合并

    众所周知,数据处理是GIS中一项重要且繁琐的工作,处理数据的工具和方法也太多了,在做数据处理的时候,经常会遇到这样的问题:对存储在不同gdb中.并且数据集名称相同的数据进行合并处理: 如图:数据组织如 ...

  4. JS 获取一个对象里面第一层元素的数量

    function getObjectLength(obj) { var i = 0; for(var k in obj){ i++; } return i; } var obj = { a: 1, b ...

  5. ruby -- 进阶学习(十四)设置background-image(解决无法获取图片路径问题)

    基于rails4.0环境 为了美化界面,添加背景图片,于是又傻逼了一回~~ 一开始在xxx.html.erb中添加:(注:图片的路径为:app/asssets/images/background.jp ...

  6. DDD:Command模式的好处

    背景 会有朋友问我为啥用命令模式(Command Pattern)组织应用层,先看看MartinFowler咋说:http://martinfowler.com/bliki/CommandOrient ...

  7. Mergely – 免费的在线文档对比和合并工具

    任何类型的文件(无论是否代码),我们可能要比较不同的版本,看发生了什么变化. 有些编辑器都有这个内置功能,其中一些则没有. Mergely 是一个免费使用的 Web 应用程序,帮你你迅速作出文档的差异 ...

  8. Direct3D11学习:(四)计时和动画

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 接触过游戏开发的人都知道,在游戏中,计时器是一个非常重要的工具,用来精确地控制游戏帧数和动画的播放.要正确实现动 ...

  9. 配置内存中OLTP文件组提高性能

    在今天的文章里,我想谈下使用内存中OLTP的内存优化文件组来获得持久性,还有如何配置它来获得高性能.在进入正题前,我想简单介绍下使用你数据库里这个特定文件组,内存OLTP是如何获得持久性的. 内存中O ...

  10. 服务器唯一id生成规则

    在使用hashCode的时候,发现会出现相同id,虽然几率很小.虽然发现并不是hashCode的原因,而是其他逻辑的问题. 但是还是试着自己写了一个id生成器,有些id是int的,比如说任务id:有些 ...