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
  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

附:

时间: 2024-11-18 04:15:40

iOS单元测试1的相关文章

iOS单元测试,String类型的宏,单个类测试可以正常取到,多个类一起测试取到的宏为null

问题描述 iOS单元测试,String类型的宏,单个类测试可以正常取到,多个类一起测试取到的宏为null

iOS单元测试和UI测试全面解析

编写测试可不是一项迷人的工作;然而,由于测试可以避免使你的宝贝应用程序变成一块充斥错误的大垃圾场,所以编写测试又是一项非常有必要做的工作.如果你正在阅读本文,那么你应当已经知道你应该为您的代码和用户界面编写测试,只是不确定如何在Xcode中编写测试. 也许你已经开发出一个能够工作的应用程序,只是还没有对它进行测试;另一方面,当您扩展该应用程序时,你又想对其任何的更改进行测试.也许你已经写了一些测试,但尚不能确定它们是否是正确的测试.或者,你现在正在开发您的应用程序,并且想随着工作的进展对之进行测

XCode下的iOS单元测试

图中的 All 栏显示所以的测试,Failed 栏显示没有通过的测试.强大吧,GHUnit.你可以向 GHUnitSampleTest 添加新的测试,比如: - (void)testSimpleFail { GHAssertTrue(NO, nil); } 我们可以向 Tests 添加更多测试类,只要该类是继承自 GHTestCase,且其中的测试方法都是无参无返回值且方法名字是以 test 为前缀即可. OCMock 下面我们来添加 OCMock. 1,我们只能以静态库的方式来添加 OCMoc

浅谈iOS单元测试

什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等.总的来说,单元就是人为规定的最小的被测功能模块. iOS中单元测试有什么意义? 大型项目开发,功能比较繁琐,代码量比较大,调试某一块功能需要不断的Command+R运行调试,很显然这样的功能是非常非常的低效的,编写过程中以及App功能完成后

iOS单元测试框架Kiwi for iOS

Kiwi是一个适用于iOS开发的行为驱动开发(BDD)库,因其接口简单而高效,深受开发者的欢迎,也因此,成为了许多开发新手的首选测试平台.和大多数iOS测试框架一样,Kiwi使用Objective-C语言编写,因此对于iOS开发者而言,绝对称得上是最佳测试拍档. 示例代码: describe(@"Team", ^{ context(@"when newly created", ^{ it(@"should have a name", ^{ id

STRUTS 2单元测试实例

当程序员编写完成程序的时候,他(她)如果保证程序的正确性呢?当然要进行测试,程序员一般要编写一个程序测试目标程序的正确性.这样的测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能.这种基于程序员的测试叫做单元测试. 单元测试原理 单元测试的原理其实很简单.就是某一条件下测试期待结果和实际结果是否一致.例如我们编写如程序清单2.1所示Java类,该类有一个方法sum. package com.kingbegin; public clas

iOS开发入门:OCUnit测试框架

使用OCUnit测试框架iOS单元测试框架 原则上,是否使用测试框架都不会影响单元测试结果,但是"工欲善其事,必先利其器"使用单元测试框架更便于我们测试和分析结果. 主要的iOS单元测试框架有: OCUnit,是开源测试框架,与Xcode工具集成在一起使用非常方便,测试报告以文本形式输出到输出窗口: GHUnit,是开源测试框架,它可以将测试报告以应用形式可视化输出到设备或模拟器上,也可以以文本形式输出到输出窗口:GHUnit可以测试OCUnit编写的测试用例: OCMock,是开源测

史上最全的iOS开源项目分类汇总

楼主转载的,并未亲自测试 Category/Util  sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错-        BFKit 又一套Category类型的 Kit,还有几个工具类        APUtils 又一套Category类型的 Kit        QSKit 又一套Category类型的 Kit        iOS-Categories 又一套Category类型的 Kit        BlocksKit 将Block风格带入UIKit和F

AngularJS 单元测试(二)详解_AngularJS

使用对象模拟注入 我们可以非常容易的使用angularjs的$provider服务用一个对象模拟一个依赖并且注入. 例子如下 angular.module('artists',[]). factory('Artists',['imageStore',function(imageStore){ return { thumb:function(){ return imageStore.thumbnailUrl(id) } } }]) 如何实现 如何确定了服务 1.创建一个URL的引用,稍后会被moc