iOS 测试驱动开发
测试驱动开发是敏捷开发的一部分,它一般有“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)
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
测试框架,可视化测试结果显示
三、 测试驱动开发最重要的是,编写高质量的单元测试用例,按照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 测试驱动开发的更多相关文章
- Scrum敏捷软件开发之技术实践——测试驱动开发TDD
重复无聊的定义 测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法.它要求在编写某个功能的代码之前先编写测试代码,然后只编写 ...
- 使用模拟对象(Mock Object)技术进行测试驱动开发
敏捷开发 敏捷软件开发又称敏捷开发,是一种从上世纪 90 年代开始引起开发人员注意的新型软件开发方法.和传统瀑布式开发方法对比,敏捷开发强调的是在几周或者几个月很短的时间周期,完成相对较小功能,并交付 ...
- 软件工程 - Test-Driven Development (TDD),测试驱动开发
参考 https://baike.baidu.com/item/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/3328831?fr=al ...
- TDD测试驱动开发
TDD测试驱动开发 一.概念 TDD故名思意就是用测试的方法驱动开发,简单说就是先写测试代码,再写开发代码.传统的方式是先写代码,再测试,它的开发方式与之正好相反. TDD是极限编程的一个最重要的设计 ...
- Cucumber测试驱动开发
Cucumber是一种BDD实践开发工具,属于敏捷开发的组成部分. 在敏捷开发中,对用户进行需求分析时,不是像传统的P&D的开发方式,首先编写大量的用户需求分析文档,而是通过一个个 ...
- Django 1.6 的测试驱动开发
http://www.oschina.net/translate/django-1-6-test-driven-development 测试驱动开发(TDD)是一个迭代的开发周期,强调编写实际代码之前 ...
- Visual Studio 2012 Fakes框架测试驱动开发TDD教程
一.前言 最近团队要尝试TDD(测试驱动开发)的实践,很多人习惯了先代码后测试的流程,对于TDD总心存恐惧,认为没有代码的情况下写测试代码时被架空了,没法写下来,其实,根据个人实践经验,TDD并不可怕 ...
- 我看TDD测试驱动开发
今天在实验室给大家介绍了一下TDD和Docker,大家对TDD都比较感兴趣,包括老板,也问了一些问题. 还是从头来说TDD吧,TDD作为敏捷开发领域的领头军,充满魅力,同时也充满争议.一切从三大军规说 ...
- Django 测试驱动开发
第一章 1.编写functional_tests.py from selenium import webdriver browser = webdriver.Firefox() browser.get ...
随机推荐
- Windows环境搭建与第一个C# Sample
Redis入门 - Windows环境搭建与第一个C# Sample 什么是Redis? Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,R ...
- Oracle / PLSQL写语句的时候常使用的函数
最近在学习数据库方面的知识,做个标记. 这里有英文解释,建议多看看英文文档: https://www.techonthenet.com/oracle/functions/ 下面开始记录一下,自己在Or ...
- 如何实现TWaver 3D颜色渐变
一般而言,须要实现3D物体的渐变,通常的思路就是通过2D绘制一张渐变canvas图片作为3D对象的贴图.这样的方式是能够解决这类问题的.只是对于一般用户而言,通过2D生成一张渐变的图片.有一定的难度, ...
- servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别
1,请求重定向:client行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保留,地址栏的URL地址会改变. 2,请求转发:server行为,req ...
- PHP学习笔记----IIS7下安装配置php环境
原文:PHP学习笔记----IIS7下安装配置php环境 Php如何安装 Php版本的选择 Php在windows下的(php5.4.7)有两种版本: VC9 x86 Non Thread Safe ...
- JavaScript的闭包特性
闭包是一个比较抽象的概念,尤其是对js新手来说.在这里,我就我个人的理解j简单谈一下: 闭包:官方解释是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部 ...
- C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP)
原文:C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP) 最近公司由于一个R&I项目的需要,用户要求在购买产品或出货等一些环节,需要发送邮件提醒或者说每周一让系统自动采集数 ...
- 读书笔记—CLR via C#同步构造28-29章节
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 搭建开发框架Express,实现Web网站登录验证
NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证 JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需 ...
- php中使用随机数
<?phpsession_start();$s = array("a","b","c","d","e&q ...