it-swarm.cn

单元测试和测试驱动开发之间的区别

通过阅读说明,我了解到在TDD中测试是在编写函数之前完成的,而在单元测试中则是在编写函数之后进行的。

这是主要区别吗,还是两个术语不能这样比较。也许,单元测试是TDD不可或缺的一部分。

66
Shamim Hafiz

单元测试是指what您正在测试,[〜#〜] tdd [〜#〜]when您正在测试。

两者是正交的。

单元测试意味着测试行为的单个单元。单个行为单位是可以单独进行测试的最小行为单位。 (我知道这两个定义是循环的,但是在实践中它们似乎工作得很好。)

您可以在编写代码之前,编写代码之后或编写代码时编写单元测试。

TDD的意思是(同样,很明显)让您的测试驱动您的开发(和您的设计)。您可以通过单元测试,功能测试和验收测试来做到这一点。通常,您同时使用这三个。

TDD最重要的部分是中间的[〜#〜] d [〜#〜]。您让测试drive您。测试告诉您做什么,下一步做什么。他们告诉您API将会是什么,设计是什么。 (这很重要:TDD并不是首先编写测试。很多项目首先编写测试,但不练习TDD。首先编写测试只是能够让测试推动开发的前提条件。)

107
Jörg W Mittag

单元测试是测试驱动开发的一部分

您可以进行单元测试,而无需进行测试驱动的开发。但是,如果不使用单元测试,就无法进行测试驱动的开发。

当您执行传统的单元测试时,您将编写测试after来编写代码。

测试驱动开发的方法是编写单元测试之前编写代码。

与简单的单元测试相比,TDD(IMHO)最有趣的优点是:

  • 代码是经过全面测试的代码。这是无痛的测试。
  • 它迫使您正确设计类。
  • 它还会迫使您 保持简单愚蠢
  • 红绿重构的循环是绝对的拖延杀手!
21
user2567

TDD和单元测试是两个非常具体的术语,经常被滥用。

TDD正在编写一个将失败的测试,然后编写使其运行所需的最少代码量,然后重构代码以使其干净。这是按周期完成的,失败->通过->重构,为每个已知的代码需求添加新的测试。最近,TDD在该周期内已变得更加具体地涉及编写单元测试,以将其与ATDD(BDD的子集)区分开来,后者是在类似周期内编写验收测试。

单元测试是关于在小的隔离单元中测试代码。这里常见的困惑是认为,如果您使用的是单元测试工具(例如xUnit或Rspec)来运行编写单元测试的测试。这不一定是真的。这些工具可用于使用Selenium框架运行测试,在这种情况下,您将使用单元测试运行程序编写验收测试。单元测试是非常专门的测试,它专注于一小部分逻辑,为了提高速度与其他所有事物隔离开来(以便您可以经常运行它们并获得有关新错误的快速反馈)。

13
pdr

TDD是如您所说的在开发之前编写测试用例,然后开发人员编写代码以通过测试用例的方法。单元测试是一个术语,用于描述除系统测试,集成测试和验收测试以外的狭窄范围的测试类型。

6
M.Sameer

TDD是一种编写代码的哲学方法:首先编写测试。您编写的测试是单元测试。

3
Tangurena

所有出色的答案。我只想补充一点,单元测试倾向于将“单元”视为一个很小的组成部分,而TDD会扩大规模以包括集成和验收测试。

(某些TDD变体将“单位”视为实现所需功能的最小增量步骤。)

1
Steven A. Lowe

我将两者分开的方式是,考虑到TDD与测试无关,而与代码设计有关。然后使用单元测试来设置对最终代码的期望。编写完最终代码并通过测试(规范)后,您就有了使用测试设计的代码。

1
Grant Palin