什么是单元测试
- 单元测试是开发者编写的一小段代码,用于检验被测代码中的一个很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。因此,我们所要测试的是规模很小的、非常独立的功能片段。通过对所有单独部分的行为建立起信心。然后,才能开始测试整个系统。
为什么要使用单元测试
有了单元测试以后,我们就没必要为了测试某个小模块去编译我们的程序,然后去等待模拟器启动然后到你需要验证的模块去,如果项目很大,编译等老半天,就会费时费力,说这些就是为了说明单元测试能节省我们时间,提高开发效率,对于项目越大的效果越明显。
单元测试使你的设计更好
能帮助你更好的理解代码
没有单元测试
任何代码都是在假定其他代码是正确无误的情况下编写的。
修改一处代码时无法得知会对其他代码产生怎样的影响。
任何一处改动都需要进行功能级别的整体调试。
单元测试难以推动的原因
太花时间
测试不是我的工作,测试应该是辅助,好的软件是开发设计出来的,不是测试出来的
系统可测试性差,系统耦合度很高,我们需要提高我们的团队的设计能力。
单元测试驱动类型
- BDD行为驱动开发(Behavior Driven Development)
行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。
BDD的核心价值是体现在正确的对系统行为进行设计,所以它并非一种行之有效的测试方法。它强调的是系统最终的实现与用户期望的行为是一致的、验证代码实现是否符合设计目标。但是它本身并不强调对系统功能、性能以及边界值等的健全性做保证,无法像完整的测试一样发现系统的各种问题。
- TDD 测试驱动开发(Test-Driven Development)
测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
1.编写测试用例
2.编写实现
3.运行测试
4.改进实现
5.重新测试
IOS中一些测试框架
XCTest(官方)
*与Xcode深度集成。而且可以享受Apple后续对XCTest升级的福利。
GHUnit
*GHUnit:集成度不如XCTest,安装麻烦。但是有自己的GUI界面。
KiWi(待了解)
OCMock(待了解)
Specta(待了解)
Github上的一些知名的开源库都用的测试框架
- 清一色的被XCTest刷屏了,GHUnit的GUI界面对我们来说没有什么特别大的意义。而XCTest血统纯正,背后站着东家Apple。而对于我们的选择也应该是XCTest,应该既然Github上又这么多XCTest的case例子可以参考,对我们的帮助肯定不言而喻。
XCTest(官方)测试框架基本原理介绍
1.测试运行时序图
试类中会调用setup和tearDown方法,setUp是初始化方法,tearDown是释放资源的方法,他们在每次调用测试方法之前和之后调用。
因此,在测试类运行的生命周期中,这两个方法可能会多次运行,它们的时序图如图所示:
单元测试研究计划
研究输出成果 (4月上旬前)
XCTest文档和demo输出,框架基本使用 (一周)
GHUnit文档和demo输出,框架基本使用 (一周)
结合实际应用一段时间(4月中旬~6月上旬)
拿一个项目走单元测试流程
总结使用体验(6月中旬)
集成框架
根据使用情况、判断是否继续、或者是否推广使用