想学习下IOS下,如何做Unit Test,同事推荐了OCMock这个site,于是就花了点时间,研究下这个框架,记录下过程中碰到的一些问题。
【介绍】
OCMock的资料在官网在: http://www.ocmock.org , 详细参考其中的IOS一节即可;
【源码】
打开官网中的IOS5 example project,就可以查看到源码的地址:
https://github.com/erikdoe/ocmock
在终端输入: git clone https://github.com/erikdoe/ocmock.git
就可以把相关的源码下载到本地, 里面包含了“Example”,“Resource”, “tools”三大块,还不大清楚具体有什么内容,只能猜个大概。
【分析】
1. Examples文件夹
里面包含了ArcExamples, IOS5Examples,iphoneExamples,三个部分,对应不同的平台?
ArcExamples,打开工程,报错,缺少libOCMock.a文件;里面只有一个main文件,和一个“.1”的文件,有点奇怪,是个说明性的工程么?
IOS5Examples,打开编译通过。
IPhoneExample, 同样通过。
【单元测试步骤】
1.在Project 中new一个targe,FILE->NEW->Target, 类型为Cocoa Touch Unit testing Bundle, 一路next,填写targe的名字,完成。
2. 系统自动产生一个target,如图中的testoc, 目录。
3. 编写单元测试内容;
在testoc.h中申明,在testoc.m中实现,具体实现方式,参考例子文件RootViewController.m。
4. 编译
完成unit test后,需要设置编译环境,才能build通过,根据官方文档:http://www.ocmock.org IOS篇的描述 ,要设置的环境变量如下:
(1) 在build phase中的“Link Binaries With Libraries”中添加libOCMock.m文件
(2) 在 Header Search Path中添加“$(PROJECT_DIR)/Libraries/Headers”,指明头文件的搜索路径。这里Libraries/Headers就在工程目录中,可以看到相关的头文件。
(3)强制XCode去装载静态库libOCMock.a,以及它需要的framewrok;(官网解释说,这是由于XCode的linker太聪明,只会加载它认为有价值的库文件,所以需要强制它去加载libOCMock.a)
在Other Linker Flags 中添加如下内容:
-Objc
-force_load
$(PROJECT_DIR)/Libraries/libOCMock.a
-framework
UIKit
-framework
SenTestingKit
完成这三步后,编译通过。
【执行Unit Test】
在Product->Edit Scheme->Test中加入需要运行的单元测试target:
然后,点击Project-Test,运行单元测试。就能得到测试结果。