119

有没有人可以清楚地定义这些测试级别,因为我发现在进行 TDD 或单元测试时很难区分。请如果有人可以详细说明如何,何时实施这些?

4

6 回答 6

156

简要地:

单元测试——你对每段单独的代码进行单元测试。想想每个文件或类。

集成测试- 将多个交互的单元放在一起时,您需要进行集成测试以确保将这些单元集成在一起不会引入任何错误。

回归测试——在集成(也许是修复)之后,你应该再次运行你的单元测试。这是回归测试,以确保进一步的更改不会破坏任何已经测试过的单元。您已经进行的单元测试已经生成了可以一次又一次地运行以进行回归测试的单元测试。

验收测试- 当用户/客户/企业收到功能时,他们(或您的测试部门)将进行验收测试以确保功能满足他们的要求。

您可能还想研究白盒和黑盒测试。还有性能和负载测试,以及要考虑的“功能”测试。

于 2011-10-06T09:42:47.287 回答
132

单元测试:当它失败时,它会告诉您需要修复哪些代码。

集成测试:当它失败时,它会告诉您应用程序的各个部分没有按预期协同工作。

验收测试:当它失败时,它告诉您应用程序没有按照客户的期望进行。

回归测试:当它失败时,它会告诉您应用程序不再像以前那样运行。

于 2011-10-07T03:44:30.373 回答
21

以下是对每个提到的测试以及何时适用的简单解释:

单元测试 单元测试是在一个独立的单元(通常是一个类或方法)上执行的,并且应该在一个单元已经实现或单元的更新已经完成时执行。

这意味着它会在您编写类/方法、修复错误、更改功能时运行......

集成测试 集成测试旨在测试几个单元之间的交互情况。每当单元之间建立了一种新的通信形式或它们的交互性质发生了变化时,都应该执行这种类型的测试。

这意味着只要最近编写的单元集成到系统的其余部分,或者每当与其他系统交互的单元已更新(并成功完成其单元测试),它就会运行。

回归测试 每当系统中发生任何更改时,都会执行回归测试,以检查是否没有引入新的错误。

这意味着它在所有补丁、升级、错误修复之后运行。回归测试可以看作是组合单元测试和集成测试的一个特例。

验收测试 只要与检查子系统(可能是整个系统)是否满足其全部规范相关,就会执行验收测试。

这意味着它主要在完成新的可交付成果或宣布完成更大的任务之前运行。将此视为您的最后检查,以查看您是否真的完成了目标,然后再跑向客户/老板并宣布胜利。

这至少是我学到的方式,尽管我确信还有其他相反的观点。无论哪种方式,我希望这会有所帮助。

于 2011-10-06T10:10:36.530 回答
14

我会尽力:

  1. 单元测试:开发人员会编写一个来测试单个组件或类。
  2. 集成测试:更广泛的测试,将涉及需要协作的多个组件或包
  3. 回归测试:对应用程序进行一次更改会迫使您重新运行所有测试并检查所有功能。
  4. 验收测试:最终用户或 QA 在签署以接受应用程序交付之前执行这些操作。它说“该应用程序符合我的要求。”
于 2011-10-06T09:43:18.797 回答
14

单元测试:我的单一方法是否正常工作?(没有依赖,或依赖模拟)

集成测试:我的两个单独开发的模块放在一起可以正常工作吗?

回归测试:我是否通过更改/编写新代码破坏了任何东西?(每次提交运行单元/集成测试在技术上(自动化)回归测试)。更常用于 QA 环境 - 手动或自动。

验收测试:由客户完成的测试,他“接受”交付的软件

于 2016-08-20T11:33:12.427 回答
2

无法评论(声誉低 :-| )所以...

@Andrejs 很好地说明了与每种类型的测试相关的环境之间的差异。

单元测试通常在开发人员机器上(可能在 CI 构建期间)运行,并模拟出对其他资源/系统的依赖关系。

根据定义,集成测试必须具有(某种程度的)依赖可用性;其他资源和系统被调用,因此环境更具代表性。用于测试的数据可能是模拟的,或者是真实生产数据的一个小的混淆子集。

UAT/验收测试必须向接受软件的 QA 和业务团队代表真实世界的经验。因此需要完全集成和真实的数据量以及完全屏蔽/混淆的数据集,以提供真实的性能和最终用户体验。

其他“功能”也可能需要环境尽可能接近现实以模拟生产体验,例如性能测试、安全性......

于 2020-04-01T04:19:56.837 回答