iOS 测试驱动开发
2013-07-13 19:35
253 查看
测试驱动开发是敏捷开发的一部分,它一般有“red-green- refactor”步骤
iOS测试驱动开发的工具
一、 OCUnit 是Xcode自带的测试工具
其使用步骤分为
1 建立测试的Target
对于测试的Target可分为两种:logic test 和application test ,其中逻辑测试可独立执行,应用测试需要启动App。
对于应用测试需要Builder Setting配置好Bundle Loader 和Test Host的值,以便改Target可以用到。
Set the value of the Bundle Loader build setting to:
iOS: $(BUILT_PRODUCTS_DIR)/<app_name>.app/<app_name>
Set the value of the Test Host build setting to:
$(BUNDLE_LOADER)
细节可参考Unit Testing in iOS
2 编写unit test case
OCUnit的test case都继承自抽象类SenTestCase,所以在编写自己的测试类时,
1 从SenTestCase继承
2 在setUp方法中完成完成测试环境的建立,一般时创建初始化被测试类的实例(在每个test函数执行钱,会被调用)
若要对于同一测试类中不同的测试函数,需要setUp不同的环境,可以考虑使用setUpTestWithSelector:(SEL)testMethod;
3 编写自己的测试函数如:testMyExample(需以test为前缀),使用断言来声明期望的测试结果
常用的断言有
STAssertNil 断言对象为空
STAssertNotNil断言对象为为空
STAssertTrue 断言表达式为真
STAssertFalse断言表达式为假
STAssertEquals 断言两个变量值相等
STAssertEqualObjects断言两个对象相等
STAssertThrows 断言抛出异常
STAssertNoThrow 断言味抛出异常
更多断言可参看SenTestingKit/SenTestingUtilities.h文件
4 在tearDown完成测试环境的恢复(每个test函数执行完后,会被调用)
3 运行单元测试
command+U
具体的细节可参考官方文档
二、GHUnit
测试框架,可视化测试结果显示
GHUnit下载地址
GHUnit配置地址
三、 测试驱动开发最重要的是,编写高质量的单元测试用例,按照MVC设计模式编写的代码,是有结构的,这个也可以应用到write unit test,对于Model层的test case,其一般结构如下
在TopicTests类中,创建初始化topic,并通过happy result和边界数值,来测试Topic类的行为
对于Controller层,一般较Model层复杂,会涉及到多个对象,要做的第一步便是孤立耦合,
对于异步网络类的测试,要借助不发送网络请求的Mock对象,
对于View层,单元测试覆盖较少,
四、测试覆盖率
对于Xcode4.0以上的同学,输出coverage 结果的设置如下:
在对应的Target下,进入Build Setting界面
设置Generate Test Coverage Files:YES
Instrument Program Flow :YES
这是进入/Users/<username>/Library/Developer/Xcode/DerivedData/<app_name-<Serial>>/Build/Intermediates/<app_name>.build/Debug-iphonesimulator/<target_name>.build/Objects-normal/i386
会发下该文件夹下有.gcda和.gcno文件,这时候便是Xcode的LLVM输出了测试结果,下载一个CoverStory ,打开相应的文件变可看到
iOS测试驱动开发的工具
一、 OCUnit 是Xcode自带的测试工具
其使用步骤分为
1 建立测试的Target
对于测试的Target可分为两种:logic test 和application test ,其中逻辑测试可独立执行,应用测试需要启动App。
对于应用测试需要Builder Setting配置好Bundle Loader 和Test Host的值,以便改Target可以用到。
Set the value of the Bundle Loader build setting to:
iOS: $(BUILT_PRODUCTS_DIR)/<app_name>.app/<app_name>
Set the value of the Test Host build setting to:
$(BUNDLE_LOADER)
细节可参考Unit Testing in iOS
2 编写unit test case
OCUnit的test case都继承自抽象类SenTestCase,所以在编写自己的测试类时,
1 从SenTestCase继承
2 在setUp方法中完成完成测试环境的建立,一般时创建初始化被测试类的实例(在每个test函数执行钱,会被调用)
若要对于同一测试类中不同的测试函数,需要setUp不同的环境,可以考虑使用setUpTestWithSelector:(SEL)testMethod;
3 编写自己的测试函数如:testMyExample(需以test为前缀),使用断言来声明期望的测试结果
常用的断言有
STAssertNil 断言对象为空
STAssertNotNil断言对象为为空
STAssertTrue 断言表达式为真
STAssertFalse断言表达式为假
STAssertEquals 断言两个变量值相等
STAssertEqualObjects断言两个对象相等
STAssertThrows 断言抛出异常
STAssertNoThrow 断言味抛出异常
更多断言可参看SenTestingKit/SenTestingUtilities.h文件
4 在tearDown完成测试环境的恢复(每个test函数执行完后,会被调用)
3 运行单元测试
command+U
具体的细节可参考官方文档
二、GHUnit
测试框架,可视化测试结果显示
GHUnit下载地址
GHUnit配置地址
三、 测试驱动开发最重要的是,编写高质量的单元测试用例,按照MVC设计模式编写的代码,是有结构的,这个也可以应用到write unit test,对于Model层的test case,其一般结构如下
@class Topic; @interface TopicTests : SenTestCase { Topic *topic; } @end
在TopicTests类中,创建初始化topic,并通过happy result和边界数值,来测试Topic类的行为
对于Controller层,一般较Model层复杂,会涉及到多个对象,要做的第一步便是孤立耦合,
对于异步网络类的测试,要借助不发送网络请求的Mock对象,
对于View层,单元测试覆盖较少,
四、测试覆盖率
对于Xcode4.0以上的同学,输出coverage 结果的设置如下:
在对应的Target下,进入Build Setting界面
设置Generate Test Coverage Files:YES
Instrument Program Flow :YES
这是进入/Users/<username>/Library/Developer/Xcode/DerivedData/<app_name-<Serial>>/Build/Intermediates/<app_name>.build/Debug-iphonesimulator/<target_name>.build/Objects-normal/i386
会发下该文件夹下有.gcda和.gcno文件,这时候便是Xcode的LLVM输出了测试结果,下载一个CoverStory ,打开相应的文件变可看到
相关文章推荐
- iOS尝试用测试驱动的方法开发一个列表模块【四】
- iOS 测试驱动开发
- 测试驱动下的iOS应用开发
- iOS尝试用测试驱动的方法开发一个列表模块【五】
- iOS 测试驱动开发
- iOS尝试用测试驱动的方法开发一个列表模块【一】
- iOS尝试用测试驱动的方法开发一个列表模块【二】
- iOS尝试用测试驱动的方法开发一个列表模块【三】
- iOS 开发 入门:真机测试
- 测试驱动开发笔记【初学者】
- 行为驱动开发iOS
- 2015071902 - 测试驱动开发 - 01
- 测试驱动开发笔记(一)——资金实例
- 谈测试驱动开发
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- Linux USB 驱动开发实例(二)—— USB 鼠标驱动注解及测试
- 爱睡觉的窝:测试驱动开发中的陷阱
- [Django]《Python Web开发 测试驱动方法》前六章非测试部分总结
- 测试驱动开发全功略(转)
- Android平台下驱动的开发及测试框架概述(一)