单元测试与功能测试

单元测试和功能测试有什么区别? 单元测试是否也可以测试一个函数?


单元测试 - 测试单个单元,例如类中的方法(函数),并将所有依赖关系模拟起来。

功能测试 - AKA集成测试,测试系统中的一部分功能。 这将测试许多方法,并可能与数据库或Web服务等依赖项交互。


单元测试告诉开发人员,代码是正确的; 功能测试告诉开发者,代码正在做正确的事情

单元测试与功能测试相比,您可以阅读更多内容


一个很好解释的单元测试和功能测试的现实生活类比可以描述如下,

很多时候,系统的开发就像建造房屋一样。 虽然这种类比不太正确,但我们可以将其扩展以便理解单元和功能测试之间的差异。

单元测试类似于访问房屋建筑工地的建筑检查员。 他专注于房子的各种内部系统,基础,框架,电气,管道等等。 他确保(测试)房屋的各个部分能够正确安全地工作,即符合建筑规范。

在这种情况下功能测试类似于房主访问这个相同的施工现场。 他认为内部系统的行为是恰当的,即建筑检查员正在执行他的任务。 房主专注于住在这个房子里会是什么样子。 他关心的是房子的外观,各种房间的尺寸是否舒适,房子是否适合家庭的需要,窗户是适合早晨晒太阳的好地方。

房主正在对房子进行功能测试。 他有用户的观点。

建筑检查员正在对房屋进行单元测试。 他有建设者的视角。


总而言之,

单元测试是从程序员的角度编写的。 它们用于确保某个类的特定方法(或单元)执行一组特定的任务。

功能测试是从用户的角度编写的。 他们确保系统在用户期望的情况下运行。


  • 单元测试测试一个独立的行为单元。 什么是行为单位? 它是系统中可以独立进行单元测试的最小部分。 (这个定义实际上是循环的,IOW它实际上并不是一个定义,但它在实践中似乎运作良好,因为你可以直观地理解它。)

  • 功能测试测试一个独立的功能。


  • 行为单位非常小:虽然我绝对不喜欢这种愚蠢的“每种方法一个单元测试”的口头禅,但从大小的角度来看,它是正确的。 行为单位是方法的一部分,也可能是一些方法之间的某种东西。 最多只有一个对象,但不能超过一个。

  • 一个功能块通常包含许多方法,并跨越多个对象并通常通过多个架构层进行切割。


  • 单元测试可能类似于:当我调用validate_country_code()函数并将国家代码'ZZ'传递给它时,它应该返回false

  • 功能测试将是:当我填写国家代码为ZZ的运输表单时,我应该重定向到帮助页面,该页面允许我从菜单中选择我的国家/地区代码。


  • 从开发人员的角度来看,开发人员为开发人员编写单元测试。

  • 功能测试可能是面向用户的,在这种情况下,从用户的角度来看,它们是由开发人员与用户一起编写的(或者可能有正确的工具和正确的用户,甚至由用户自己编写)。 或者他们可能是面向开发人员的(例如,当他们描述用户不关心的某些内部功能时),在这种情况下,它们是由开发人员为开发人员编写的,但仍然从用户的角度来看。


  • 在前一种情况下,功能测试也可以用作验收测试,并作为功能需求或功能说明的可执行编码,在后一种情况下,它们也可以用作集成测试。

  • 单元测试经常发生变化,功能测试不应在主版本中更改。


  • 链接地址: http://www.djcxy.com/p/67795.html

    上一篇: Unit tests vs Functional tests

    下一篇: list initialization of aggregates: when can it invoke copy constructor?