功能测试恰好填充了在单元测试和向项目小组提交的代码依据之间的空隙。单元测试会漏过许多的bug。它可以给出代码中你所需的所有有效部分,它也会给你所需的整个系统。功能测试可以使单元测试里漏掉的问题曝光。一系列可维护的,自动化的功能测试也会有漏网的情况,但是它至少比独立地进行最全面的单元测试要有用得多。
单元测试VS 功能测试
单元测试告诉开发者代码使事情正确地被执行,而功能测试所说的则是代码在正确地发挥功效。
单元测试
单元测试是从开发者的角度来编写的。它们确保类的每个特定方法成功执行一系列特定的任务。每一个测试都要保证对于给定的一个已知的输入应该得到所期望的输出。
编写一系列可维护、自动化、没有测试框架的单元测试几乎是不可能的。在你开始之前,选择一个项目小组都认可的框架。不断地应用它,逐渐地喜欢它。在极端编程的介绍网页上(见资源一节),有很多适用的单元测试框架。我喜欢用的是Juint 来进行Java 代码的测试。
功能测试
功能测试则是从用户的角度来编写的。这些测试保证系统能够按照用户所期望的那样去运行。很多时候,开发一个完整的系统更像是建造一座大楼。当然,这种比喻并不是完全地恰当,但我们可以扩展它,来理解单元测试和功能测试之间的区别。
单元测试类似于一个建筑检查员对房屋的建设现场进行检查。他注重的是房屋内部不同的系统,地基,架构设计,电气化,垂直的线条等等。他检查房屋的某个部分,以确保它在安全状态下,正确无误地工作,即是说,直接针对房屋的代码。功能测试在这个剧本里类似于房屋的主人在检查同样的建设场地。他所期望的是房屋的内部系统正常地运转,并且房屋检查员执行了他的任务。房屋的主人看重的是生活在这样的房屋中会是什么样子。他关注这间房屋的外貌,不同的房间有合适的空间,房屋适用于家庭的需要,窗户恰好位于最佳采光的位置。房屋的主人运行的是对房屋的功能测试,他站在用户的角度上。房屋检查员运行的是单元测试,他是站在建设者的角度上。
象单元测试一样,编写一系列可维护、自动化、没有测试框架的功能测试几乎是不可能的。Junit在单元测试方面做得很好;然而,它在试图编写功能测试时就显得比较松散。Junit 不等同于功能测试。现在已经有满足这个功能的产品问世了,但是我还没有看到它们被应用于开发产品过程里。如果你不能找到一个测试框架的话,就只好自己创建一个了。无论我们在建立一个项目时多么聪明,建立的系统多么灵活,如果我们的产品不能用,我们就是在浪费时间。结论是,功能测试是开发进程中最重要的一部分。
因为两种类型的测试都是必要的,你会需要编写它们的指南。
如何编写单元测试
在你开始编写单元测试很容易被激动的情绪感染。最简单的起步方式就是为新的代码创建单元测试。为已经存在的代码创建单元测试是一种比较有难度的开始方式,但是也是可行的。)从新的代码开始,习惯了这样的步骤后,还要坚持重新阅读现有代码,并为它们创建一套测试程序。
就像前面提到过的一样,你应该在你编写要测试的代码之前编写单元测试。如何做到为还不存在的事物编写测试呢?好问题!掌握这个能力需要90%的智力和10%技巧。我的意思是你只需假装是在为已有的类编写测试。接下来,进行编写的工作。最初,你将出现很多语法错误,但是let it be,不要理会它。紧接着进行单元测试,修改语法错误(即是说,只用你自己定义的测试接口来实现类),再一次进行测试。重复这个过程,每一次都写下充足的代码去修改错误,进行测试直到它们通过为止。当所有的单元测试都通过时,代码才算真正地完成了。
文章来源于领测软件测试网 https://www.ltesting.net/