Unit Test? Integration Test? Regression Test? Acceptance Test?

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

85590 次浏览

Briefly:

Unit testing - You unit test each individual piece of code. Think each file or class.

集成测试 -当把几个交互的单元放在一起时,需要进行集成测试,以确保将这些单元集成在一起没有引入任何错误。

Regression testing - after integrating (and maybe fixing) you should run your unit tests again. This is regression testing to ensure that further changes have not broken any units that were already tested. The unit testing you already did has produced the unit tests that can be run again and again for regression testing.

Acceptance tests - when a user/customer/business receive the functionality they (or your test department) will conduct Acceptance tests to ensure that the functionality meets their requirements.

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

我试试:

  1. 单元测试: 开发人员将编写一个单元测试来测试单个组件或类。
  2. 集成测试: 一个更广泛的测试,涉及需要协作的几个组件或包
  3. 回归测试: 对应用程序进行单个更改将迫使您重新运行所有测试并检查所有功能。
  4. 验收测试: 最终用户或 QA 在签署以接受应用程序的交付之前进行这些测试。上面写着“应用程序符合我的要求”

下面是对上面提到的每个测试的简单解释,以及它们适用的时间:

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

这意味着只要你编写了一个类/方法,修复了一个 bug,更改了功能,它就会运行。

积分测试 集成测试的目的是测试多个单元之间的交互情况。每当单位之间建立了一种新的通信形式,或者它们之间的交互性质发生了变化,就应该进行这种类型的测试。

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

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

This means it's run after all patches, upgrades, bug fixes. Regression testing can be seen as a special case of combined unit test and integration test.

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

这意味着它主要在完成一个新的可交付内容或者宣布完成一个更大的任务之前运行。把这看作是你最后的检查,看看你是否真的完成了你的目标,然后跑到客户/老板那里宣布胜利。

This is at least the way I learned, though I'm sure there are other opposing views. Either way, I hope that helps.

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

集成测试: 当它失败时,它会告诉您应用程序的各个部分没有像预期的那样一起工作。

验收测试: 当它失败时,它告诉您应用程序没有做客户期望它做的事情。

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

单元测试: 我的单个方法工作正常吗? (没有依赖项,或被模拟的依赖项)

集成测试: 是我分别开发的两个模块在 放在一起?时正常工作

回归测试: 我是否通过改变/编写新代码而破坏了什么?(在每次提交时运行单元/集成测试在技术上是自动的回归测试)。更常用于质量保证上下文-手动或自动。

验收测试 : 客户端完成的测试,他“接受”交付的 SW

Can't comment (reputation to low :-| ) so...

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

Unit tests are run typically on developers machine (and possibly during CI build) with mocked out dependencies to other resources/systems.

根据定义,集成测试必须(在一定程度上)具有依赖项的可用性; 调用其他资源和系统以使环境更具代表性。用于测试的数据可能是模拟的,或者是实际生产数据的一个小的模糊子集。

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

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