400-650-2699

单元测试与功能测试的区别

发布时间:2019-4-15 分享到:

单元测试

单元测试是从程序员的角度编写的。它确保类的某个特定方法成功执行一系列特定的任务。每个测试都确保只要给定输入,方法将输出预期的结果。

如果没有测试框架,编写一套可维护的自动化单元测试几乎是不可能的。在开始编写测试之前,请选择一个小组公认的框架。您将经常性地使用这个框架,因此您最好对它有点好感。极限编程网站提供了几个单元测试框架(请参阅参考资源)。我最熟悉的框架是 JUnit,它专门用来测试 Java 代码。

功能测试

功能测试是从用户的角度编写的。这种测试确保系统执行用户期望它执行的工作。

很多时候,系统开发好比建筑房屋。尽管这种类比不很恰当,但为了理解单元测试与功能测试的区别,我们可以扩充这种类比。单元测试好比房屋建筑现场的建筑监理员。他关心房屋的各个内部系统,如地基、构架、供电系统和管道设备等。他确保(测试)房屋每一部分的工作都安全、正常,即符合建筑说明。这种情况下,功能测试类似于视察同一建筑现场的房主。他假定内部系统将正常运作,并假定建筑监理员在执行其任务。房主关心的是住在这所房子里将会怎样。他关心房子的外观如何,各个房间的大小是否合适,房子能否满足家庭的需要,以及窗户的位置是否有利于采光。房主对房子执行功能测试。他从用户的角度考虑问题。建筑监理员对房子执行单元测试。他从建筑工人的角度考虑问题。

就像单元测试一样,如果没有测试框架,编写一套可维护的自动化功能测试实际上是不可能的。JUnit 非常适合编写单元测试;但是,当试图编写功能测试时,它就显得力不从心了。就功能测试而言,没有与 JUnit 相当的框架。也有几种用于功能测试的产品,但我从来没见过它们应用于生产环境。如果找不到满足您的需要的框架,您就必须创建一个。

无论我们多么擅长于构建手头的项目,也不管我们正在创建的系统多么灵活,如果我们的产品不合用,那我们就是白费时间。因此,功能测试是开发最重要的部分。

由于两种测试都必不可少,您就需要了解编写它们应遵循的原则。

单元测试是从开发人员的角度出发编写的,并且关注的是所测试的类的特定方法。当编写单元测试时,请使用以下这些原则:

●首先编写单元测试,然后再编写要测试的类代码

●在单元测试中捕获代码注释。

●测试所有执行“令人感兴趣的”功能(即,不是 getter setter,除非它们以某种独特的方式执行获取和设置操作)的公共方法。

●将每个测试实例与它要测试的类放在同一个包内,以获得对包成员和保护成员的访问权。

●避免在单元测试中使用特定于域的对象。

●功能测试是从用户的角度出发编写的,并且关注用户感兴趣的系统行为。找一个优秀的功能测试框架,或者开发一个测试框架,并使用这些功能测试识别用户的真实需求。这样,功能测试人员即可获得一种自动化工具以及使用这一工具的着手点。

●使单元测试和功能测试成为您开发过程中的中心环节。如果您这样做了,您将对系统的运行及扩展充满信心。如果您没有这样做,您对系统就没有十足的把握。 测试可能不那么有趣,但在开发过程中进行单元测试和功能测试。