我们为什么要用测试框架呢?当然对项目开发有帮助了,但是业内现状是经常赶进度,所以TDD还是算了吧,BDD就测测数据存取和重要环节,这很重要,一次性跑完测试单元检查接口或模块的可用性,这比打断点调试强多了吧,至于UI测试就算了吧(xcode7集成了),呵呵。

首先了解一下BDD与TDD的概念:

BDD(Behavior Driven Development),也就是行为驱动开发,它旨在解决具体问题,帮助开发人员确定应该测试些什么。

TDD(Test-Driven Development),就是测试驱动开发,通过测试来推动整个开发的进行。

github上搜TDD或BDD,语言选择objective-c,star最多的就是这2个:

此外,还找到2个Swift的测试框架,以后用Swift开发可以考虑使用:

Cedar,Specta和Kiwi这3个框架就是目前Objc最流行的BDD测试框架了,其中Kiwi最受欢迎(根据github上的star数来推断,行为描述和期望写起来也比较易懂,至少我是这么认为的)。

不过,Specta是 RAC 那帮人维护的,用于测试的黑魔法更多,我担心这帮人精力太分散顾及不上这个测试框架。但是有些使用测试框架经验丰富的人选择用回了XCTest,主要是因为它跟Xcode集成的比较好,而且嫌BDD框架hold不住业务的发展,cmd+u可以一次性跑完所有的测试(试过3个框架目前都可以这样的)。

XCTest与Xcode深度集成,而且可以享受Apple后续对XCTest升级的福利。XCTest 的优势和缺点都是由于它太简单了。你只需要创建一个类,使用 “test” 作为测试方法名的前缀,只需要这样就可以了,不需要再做其他的。不幸的是,这已经是 XCTest 的全部优点了。BDD 框架的附加功能的重要性是取决于项目的大小。我的结论是,XCTest 对中小型的工程来说是一个很好的选择,但是对于更大型的工程,就有必要参考一下像 Kiwi 或者 Specta 这样的 BDD 框架。Specta和Kiwi的区别就是Kiwi包含了Specta和OCmock以及Expeata所有的功能。换句话说Specta就是没有mock和验证功能Kiwi。经测试,Kiwi与Specta是不能同时在项目中使用的,会Crash,不信你试试,不过各自可以与XCTest混合使用因为它们是基于XCTest封装的。

Cedar,Kiwi,以及 Specta 提供类似语法,我不能说其中一个框架要比其他所有都好,它们各有利弊,选择 BDD 框架归根结底来自个人偏好。我选择Kiwi是因为只需要在podfile导入一个Kiwi就行了,Specta则需要依赖别的第三方库,虽然灵活,但灵活有灵活的坏处,当然也有好处,你喜欢就好,反正用得不爽别怨我。

如果使用Specta,还要引入OCmock/OCMockito以及Expeata/OCHamcrest一起配合使用。

OCMock Or OCMockito

这两个都是用来mock对象,Stub方法的,他们之间的区别在于使用OCMock的库比OCMockito的库多,而且文档和教程更加丰富。

Expecta Or OCHamcrest

这两个都是断言的扩展框架,Expecta不成熟,框架还有一些的问题。OCHamcrest更加成熟,而且可扩展性高,可以自定义自己的断言,更灵活。

BDD的理念是你不是在写代码,而是在讲故事。而整个故事是由Given…When…Then组成。我们可以来看看BDD框架Kiwi的一段测试代码:describe(@"Team", ^{

context(@"when newly created", ^{

it(@"has a name", ^{

id team = [Team team]; [[team.name should] equal:@"Black Hawks"];

});

it(@"has 11 players", ^{

id team = [Team team]; [[[team should] have:11] players];

});

});

});

这个测试用例就是在说Given a Team,When newly created,it should have a name, and should have 11 players,基本上不需要注释就能知道在干嘛。

不同类型的模拟对象的基本定义:

double 可以理解为置换,它是所有模拟测试对象的统称,我们也可以称它为替身。一般来说,当你创建任意一种测试置换对象时,它将被用来替代某个指定类的对象。

stub 可以理解为测试桩,它能实现当特定的方法被调用时,返回一个指定的模拟值。如果你的测试用例需要一个伴生对象来提供一些数据,可以使用 stub 来取代数据源,在测试设置时可以指定返回每次一致的模拟数据。

spy 可以理解为侦查,它负责汇报情况,持续追踪什么方法被调用了,以及调用过程中传递了哪些参数。你能用它来实现测试断言,比如一个特定的方法是否被调用或者是否使用正确的参数调用。当你需要测试两个对象间的某些协议或者关系时会非常有用。

mock 与 spy 类似,但在使用上有些许不同。spy 追踪所有的方法调用,并在事后让你写断言,而 mock 通常需要你事先设定期望。你告诉它你期望发生什么,然后执行测试代码并验证最后的结果与事先定义的期望是否一致。

fake 是一个具备完整功能实现和行为的对象,行为上来说它和这个类型的真实对象上一样,但不同于它所模拟的类,它使测试变得更加容易。一个典型的例子是使用内存中的数据库来生成一个数据持久化对象,而不是去访问一个真正的生产环境的数据库。

实践中,这些术语常常用起来不同于它们的定义,甚至可以互换。它们自认为自己是 "mock 对象框架",但是其实它们也提供 stub 的功能,不要太过于陷入这些词汇的细节。

下面讲讲Kiwi的使用,尽量简单,以便快速上手,当然详情还是得看官方文档,链接奉上:

1.Kiwi的安装

podfile中写入target 'OneTravelTests', :exclusive => true do

pod 'Kiwi'

end

然后pod install或pod update就可以了。

可以安装一个xcode插件http://alcatraz.io,里面有Kiwi的template,安装一下,然后就可以使用Kiwi了。然而有人说插件用不了,怪我咯?懒得解释了,看这里吧:

2.Kiwi的基本语法解释

上3张图,一切尽在不言中。

kiwi基本语法解释

mock与stub解释

测试数据请求

3.我们应该/不应该测试什么

BDD 的第一个单词就表明了这一点,你不应该关注于测试,而是应该关注行为。这个看似毫无意义的变化提供了应该测试什么的准确答案:你应该测试行为。

例如你设计的一个对象,它有一个接口定义了其方法和依赖关系。这些方法和依赖,声明了你对象的约定,它们定义了如何与应用的其他部分交互,以及它的功能是什么。它们定义了对象的行为。同时这也应该是你的目标:测试你对象的行为方式。

不应该测试什么呢?不要测试私有方法:私有方法意味着私有,如果你感到有必要测试一个私有方法,那么那个私有方法一定含有概念性错误,通常是作为私有方法,它做的太多了, 从而违背了单一职责原则。

不要 Stub 私有方法:Stub 私有方法和测试私有方法具有相同的危害,更重要的是,Stub 私有方法将会使程序难以调试。通常来说,用于Stub的库会依赖于一些不寻常的技巧来完成工作,这使得发现一个测试为什么会失败变的困难。

不要测试构造函数:构造函数定义的是实现细节,你不应该测试构造函数,这是因为我们认同测试应该与实现细节解耦这一观点。

不要 Stub 外部库:第三方代码不应该在你的测试中直接出现。

4.测试的目的使重构更简单 —— 你可以自信的修改实现细节,而不用去触及公有 API。

避免代码恶化—— 恶化在什么时候发生?在你修改代码的时候。

提供了可执行的说明和文档 —— 你在什么时候更想知道软件实际上是如何工作的?在你想修改它们的时候。

减少了创建软件的时间 —— 怎么减少时间的?是通过更快速地修改你的代码,出错时测试会自信地告诉你哪里出错了。

降低了创建软件的代价 —— 时间就是金钱,朋友。

测试应该:很快速(Fast) —— 测试应该能够被经常执行。

能隔离(Isolated) —— 测试本身不能依赖于外部因素或者其他测试的结果。

可重复(Repeatable) —— 每次运行测试都应该产生相同的结果。

带自检(Self-verifying) —— 测试应该包括断言,不需要人为干预。

够及时(Timely) —— 测试应该和生产代码一同书写。

5.UI测试

关于UI测试,需要测试的是用户的交互,而不是应用的外观,Xcode7中新增了UI Testing,具体可以看wwdc 2015 session :406_hd_ui_testing_in_xcode。

好了,没了,我有严重的拖延症,哎。

测试ios软件开发,iOS开发中的测试框架相关推荐

  1. 方言听力测试软件,汉语普通话噪声中听力测试材料在不同方言正常人中的应用研究...

    摘要: 目的 研究汉语普通话噪声中听力测试(hearing in noise test,HINT)句子测试材料在不同方言听力正常人中的测试效果.方法 使用BLIMP测试软件对不同方言地区和北京市正常听 ...

  2. 新装主机测试性能软件,如何进行电脑性能的测试

    据网络调查,发现有不少网友在新装电脑以后,心中存在一个疑惑就是不能确定自己的电脑性能如何.下面学习啦小编就教大家如何进行电脑性能测试的几大方法,欢迎大家参考和学习. 电脑性能测试的方法分别有以下几种: ...

  3. 上海高考听说测试什么软件,2021上海市高考外语听说测试模拟系统使用方法及注意事项...

    2021年上海市高考外语听说测试模拟系统如何使用?有哪些注意事项?小编整理了相关内容如下,大家快来了解一下吧! 2021年上海市高考外语听说测试模拟系统使用注意事项 试音 佩戴耳机时,话筒应略低于嘴巴 ...

  4. 测试枕头软件,360度模拟人体睡眠测试,选对枕头让睡眠一步到位

    原标题:360度模拟人体睡眠测试,选对枕头让睡眠一步到位 戴维弗林凝胶枕是享誉百年的意大利皇室至爱奢侈品牌,因为拥有先进的科技.精湛的工艺以及多位国际大师的经典设计等优势而慢慢发展壮大,针对不同睡眠习 ...

  5. 制作在线单词测试的软件,iSpring QuizMaker提供14种测试题型,轻松创建在线测试(下)...

    iSpring QuizMaker是一款测验制作工具,可以用它创建评估,设置自定义评分,并在线评估员工的进度.iSpring QuizMaker是在线课程创建工具包iSpring Suite的一部分! ...

  6. 网上的名字测试打分软件准吗,名字打分免费测试最准的还是算网

    关于名字打分免费测试最准的网站,我建议大家找算网,为什么这么说呢?因为现在网络上的起名网站虽然很多,也有很多的名字打分服务,但是这些很多都是电脑起名.电脑打分的,这些都是通过设定好的一套程序来进行起名 ...

  7. 测试身体素质健康的软件,索美国家体质健康测试管理软件

    索美国家体质健康测试管理软件官方版是一款轻松上手.功能十分强大的体质测试管理软件,索美国家体质健康测试管理软件官方版专门用于体育课程记录.学生健康测试等方面,可以快速高效地记录学生体育成绩及健康测试结 ...

  8. 直播网站源码直播平台软件开发iOS动手做一个直播(原理篇)

    直播网站源码直播平台软件开发iOS动手做一个直播(原理篇) 上篇文章主要给出了代码,但是并没有详细说明直播相关的知识,这篇文章就说一下直播的相关理论知识.附上直播代码篇地址. ###推流 腾讯直播平台 ...

  9. 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序

    之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...

  10. iOS软件开发架构理解

    iOS软件开发架构理解 这个东西是硬伤,框架?自带的mvc? 自带的UIViewController UIView UINavigationController 这些算不算?当然算的,cocoa框架嘛 ...

最新文章

  1. KMeans聚类算法Hadoop实现
  2. Ubuntu下报错PCIe Bus Error:severity=Corrected, type=Physical Layer, id=00e8(Receiver ID)
  3. RS485串口光端机产品功能特点介绍
  4. 为view添加约束constraints
  5. C# - Environment类,获取桌面的路径
  6. [No000013F]WPF学习之X名称空间详解
  7. okhttp教程——起步篇
  8. 阿里云宗志刚:云网一体,新一代洛神云网络平台
  9. mybatis注解的使用
  10. win10下安装numpy
  11. 夯实Java基础系列16:一文读懂Java IO流和常见面试题
  12. 书小宅之概念汇总——胜读十年书
  13. 易基因 | 文献速递:RRBS方法绘制1538例乳腺癌甲基化图谱并预测癌症发生/预后
  14. 嵌入式C++开发详解
  15. 如何挖掘Nginx日志中隐藏的金矿?
  16. 嵌入式混合操作系统TOS源码开源
  17. uni-app入门教程(7)第三方登录和分享
  18. 基于数字神经系统的绩效考核
  19. 锁相环PLL的工作原理
  20. SpringMvc中关于@ResponseBody和HashMap的用法

热门文章

  1. 从零搭建Hexo博客并部署腾讯云服务器(宝宝级教学)
  2. 社交网络叠加直播功能,会产生什么化学反应?
  3. python图片logo_Python logo
  4. 光纤猫连接路由器_CodingPark编程公园
  5. 计算机网络初探(ip协议)
  6. 博科查看光功率_博科系交换机光模块信号强度查看
  7. 在laravel中使用wordpress
  8. oracle yum配置本地源,oel 7 本地yum源配置
  9. Ant 下载、安装、使用、教程全面了解
  10. 伪指令dd 和 操作符dup