文档章节

[基础]iOS 单元测试(一)入门与配置

a
 advancer_chen
发布于 2016/05/18 17:12
字数 1578
阅读 720
收藏 6

所有文章目录:http://my.oschina.net/ChenTF/blog/677112

本篇文章地址: http://my.oschina.net/ChenTF/blog/677309

会持续的更新所有历史文章, 所以收藏的话请收藏上面的地址。

workspace — project — targets 讲解

    一个工作空间可以包含多个项目,一个项目可以包含多个目标(生成物)。

    一个项目中根据运行的targets不同,可以进行不同的编译设置,project是基础父类,targets是子类,targets的设置会覆盖project的设置。

 

Target与单元测试的关系

     单元测试是在一个新的target上进行的设置,这样就不会影响程序开发,编译。

     在XCode7中创建一个项目时默认是选中创建测试target的,如果没有,创建方法如下:File -> New -> target -> UITest/UnitTest,创建完成后会自动创建对应的文件夹。

UnitTest

     使用该UnitTest测试一些代码逻辑,使用UITest测试UI的点击交互逻辑。

1.创建要测试的代码

2.创建测试类

说明:

  • 任何测试类都需要继承自 XCTestCase 类
  • setUp,tearDown是系统默认方法
  • 命名:测试的目标类名+Tests

3.编写测试方法

说明:

  • 测试方法必须以testXXX开头,Xcode会自动识别出所有的测试方法
  • 在一个类中测试方法的调用顺序是按照方法的顺序来调用的,本例中1 -> 2 -> 3。
  • 需要测试某些逻辑性操作时,要主要测试方法的编写顺序,比如 1先插入10条数据 -> 2根据id查询数据 -> 3查询所有数据
  • 每个测试方法是分开到,调用顺序 setUp -> test1 -> tearDown, setUp -> test2 -> tearDown,这样保证各个测试用例直接不会互相影响

调用:

  • 执行所有测试方法:command + u
  • 只执行某个测试方法:点击方法前的菱形(目前是对号/错号)
  • 执行某个类的所有测试方法:点击类前的菱形(目前是对号/错号)

 

4.测试结果与XCTAssert断言函数

     一个测试是否通过,是需要通过XCTassert类来进行验收的,XCTAssert是 一系列宏方法,提供了很多的判断(下面会列举)。

     如果通过则是在方法前是√,没有打印;如果失败则方法前是×,打印。(看上图)

打印:

测试用例列表:

XCTAssert宏方法

参考地址:http://my.oschina.net/u/1418722/blog/340194?fromerr=RUMiSWBO

XCTFail(...)
任何尝试都会测试失败,...是输出的提示文字。(后面都是这样)

XCTAssertNil(expression, ...)
expression为空时通过,否则测试失败。
expression接受id类型的参数。

XCTAssertNotNil(expression, ...)
expression不为空时通过,否则测试失败。
expression接受id类型的参数。

XCTAssert(expression, ...)
expression为true时通过,否则测试失败。
expression接受boolean类型的参数。

XCTAssertTrue(expression, ...)
expression为true时通过,否则测试失败。
expression接受boolean类型的参数。

XCTAssertFalse(expression, ...)
expression为false时通过,否则测试失败。
expression接受boolean类型的参数。

XCTAssertEqualObjects(expression1, expression2, ...)
expression1和expression1地址相同时通过,否则测试失败。
expression接受id类型的参数。

XCTAssertNotEqualObjects(expression1, expression2, ...)
expression1和expression1地址不相同时通过,否则测试失败。
expression接受id类型的参数。

XCTAssertEqual(expression1, expression2, ...)
expression1和expression1相等时通过,否则测试失败。
expression接受基本类型的参数(数值、结构体之类的)。

XCTAssertNotEqual(expression1, expression2, ...)
expression1和expression1不相等时通过,否则测试失败。
expression接受基本类型的参数。

XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, ...)
expression1和expression2之间的任何值都大于accuracy时,测试失败。
expression1、expression2、accuracy都为基本类型。

XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, ...)
expression1和expression2之间的任何值都小于等于accuracy时,测试失败。
expression1、expression2、accuracy都为基本类型。

XCTAssertGreaterThan(expression1, expression2, ...)
expression1 <= expression2时,测试失败。
expression为基本类型

XCTAssertGreaterThanOrEqual(expression1, expression2, ...)
expression1 < expression2时,测试失败。
expression为基本类型

XCTAssertLessThan(expression1, expression2, ...)
expression1 >= expression2时,测试失败。
expression为基本类型

XCTAssertLessThanOrEqual(expression1, expression2, ...)
expression1 > expression2时,测试失败。
expression为基本类型

XCTAssertThrows(expression, ...)
expression没抛异常,测试失败。
expression为一个表达式

XCTAssertThrowsSpecific(expression, exception_class, ...)
expression没抛指定类的异常,测试失败。
expression为一个表达式
exception_class为一个指定类

XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, ...)
expression没抛指定类、指定名字的异常,测试失败。
expression为一个表达式
exception_class为一个指定类
exception_name为一个指定名字

XCTAssertNoThrow(expression, ...)
expression抛出异常时,测试失败。
expression为一个表达式

XCTAssertNoThrowSpecific(expression, exception_class, ...)
expression抛出指定类的异常,测试失败。
expression为一个表达式

XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, ...)
expression抛出指定类、指定名字的异常,测试失败。
expression为一个表达式
exception_class为一个指定类
exception_name为一个指定名字

测试环境的部署

1.Target Membership

参考:http://www.cnblogs.com/graphics/p/4117353.html

    Target membership是指XCode中,一个文件属于哪一个工程,在XCode左侧的工程面板中选中一个文件,在XCode右侧的属性面板中会显示其Target Membership,如下图。

    当前的文件AppDelegate.m属于书谱这个Target。

Target Membership的一些属性。

  • .h  文件没有Target Membership
  • 文件夹引用有Target Membership,其子文件继承该文件夹的Target Membership。但面板中不显示子文件的Target Membership。

    以前遇到一个错误,就是UIImage创建的时候返回nil,仔细查看发现,图片的Target Membership选项没有勾上。这个错误比较难以发现,特此记之。

 

2.Link Binary With Libraries

     在测试本地存储是,如果需要一些二进制文件的支持,则test targert也需要引入相应的文件(配置和正常项目需一样)。

 

3.设置本地的支持文件路径

提醒:

     每次修改完配置文件,建议先Clean(Command+Shift+K)缓存,再编译。

4.PCH

    pch 和main target设置成一直, 注意Precompile Prefix Header选项。

 

5.Pods设置

     当项目中有pod时, 在测试文件中引用pods的文件, 提示找不到, 错误如下:

     解决方案: 设置PROJECT的Configurations

 

6.plist设置

     两种方案

     一: 设置plist文件与build一致

     二: 将info.plist路径改成build target的路径

 

 

Code

https://github.com/ChenTF/Experiences/tree/master/XCodeSetting

© 著作权归作者所有

共有 人打赏支持
a
粉丝 16
博文 19
码字总数 19578
作品 0
朝阳
iOS工程师
加载中

评论(1)

10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0
10步成为专业iOS开发者——从零起步

想在移动开发大餐中分一杯羹,体验最火最炫的技术?小伙子,很有眼光嘛 毫无疑问,移动开发在目前和未来几年内都会盛极一时。无数开发职位虚位以待。各大公司都在寻找各种层次的程序员——新...

hejunbinlan
2015/06/18
0
0
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
05/26
0
0
【IOS视频教学】三个月学会IOS开发

一、windows系统下安装虚拟机-mac系统-视频教程-安装件全套下载:http://www.wyzc.com/forum/56212.html 二、史上最佳0基础Swift语言视频教程下载链接:http://www.wyzc.com/forum/56744.htm...

马洪伟
2014/12/25
0
0
那些在学习iOS开发前就应该知道的事(part 2)

英文原文:Things I wish I had known before starting iOS development—Part 2 如果你还没读这篇文章的第一部分,请先读完了再来看第二部分。 那些在学习iOS开发前就应该知道的事(part 1)...

TomatosX
2015/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据框架对比:Hadoop、Storm、Samza、Spark和Flink

简介 大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性、规模...

hblt-j
27分钟前
2
0
正则介绍及grep/egrep用法

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data 9.1 正则介绍_grep上 什么是正则 ...

zgxlinux
42分钟前
2
0
想用Unity3D引擎软件赚点钱的看过来

前言: 你可以不拥有很多钱 但你一定要有赚钱的能力 目前手上有项目, 需要熟练Unity3D引擎软件的伙伴 有意向的给我发私信

猿神出窍
45分钟前
2
0
Spring Boot全局异常处理

Spring Boot默认的异常处理机制 默认情况下,Spring Boot为两种情况提供了不同的响应方式。 一种是浏览器客户端请求一个不存在的页面或服务端处理发生异常时,一般情况下浏览器默认发送的请求...

狼王黄师傅
今天
8
0
Thinkphp5 优雅配置两个数据库

工作需要需要配置两个数据库,框架5.0的,步骤如下: 1、在database.php同级创建一个database2.php文件 在里面配置第二个数据库信息, 2、在config中配置这个数据库信息: 3、创建第二个表的...

wqzbxh
今天
5
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部