PHP TDD 测试驱动开发教程 第一部分

测试驱动开发是一种编码实践,在这种实践中,您首先编写一个测试,然后编写代码以通过该测试,通常是在较短的迭代周期中进行。

测试驱动开发( TDD ) 由 肯特·贝克(Kent Beck) 进行推广。 TDD 是他的 Extreme Programming 软件开发方法学中遵循的主要技术之一。

现在,让我们按步骤可视化 TDD :

  1. 编写测试 (足以使其失败)
  2. 运行它,然后查看失败
  3. 编写代码
  4. 再次运行测试,看它通过了
  5. 重复步骤 1

因此,您可以看到 TDD 是一个闭环过程。程序员沉浸在一个流程中,使他与编写测试或编写功能实现代码的实践保持联系。

“ 这样做有什么好处呢?” 你可能会问。

遵循 TDD 方法有许多好处。

  1. 它有助于将正常工作和不正常工作的代码展示出来,可以很快的找出问题在哪里,因为几秒钟前您已经让测试完美地工作了。
  2. 它有助于最大程度地减少重构代码所需的时间,因为您可以轻松地测试重构时是否发生了中断。
  3. 它使添加新功能变得非常容易,因为您可以轻松的更改代码以适应新功能。
  4. 它使程序员充满信心,不必担心代码是否能正常运行。因为上述第2点和第3点。您可以轻松添加新功能并重构代码,无需担心出现故障。
  5. 它有助于将软件开发分解为可以管理的部分。由于 TDD 循环足够短,可以轻松上手,因此无需恐惧启动一个新功能。
  6. 随着软件的增长,它有助于停止指数级的更改成本,因为您添加功能无需花费更多时间。

关于这一点的一个很好的演讲是 Konstantin Kudryashov最小化软件成本

在演讲中,康斯坦丁谈到了在没有测试的情况下,随着项目时间的推移,变更成本(添加新功能)呈指数级增长的情况。

没有测试的更改的指数成本

没有测试的更改的指数成本

但是如果有测试,更改的成本将被限制,从而更容易添加新功能。

通过测试的变更成本上限

通过测试的变更成本上限

TDD 当然也有一些缺点。

  1. 开始使用 TDD 并不容易。需要您了解许多新的实践和技术。如:单元测试,模拟,断言等
  2. 由于您在编写代码时需要测试代码,因此在进行开发时需要花费更多时间。

一系列有趣的辩论是 TDD是否已死亡 ,由 Martin FowlerKent BeckDavid Heinemeier Hansson 。 David 认为 TDD 不适用于所有类型的编码样式。并且认为 TDD 实际上引入了更多需要解决的问题。

总而言之,我更喜欢 TDD ,因为它有更多的优点和很少的缺点。我认为如果您想长期维护代码库,TDD 实际上是必不可少的。如果您只是试验您的代码,并且在较长时间内不需要它,那么在这种情况下您可能不需要 TDD。

那么,测试驱动开发是由什么组成的呢?在编写任何新代码之前,都要先编写单元测试。我们编写的一些代码实际上是通过集成测试进行测试的。因此,对于与第三方 API 或库/数据库等交互的代码,我们编写集成测试而不是单元测试。不要担心,我们将在即将推出的部分中详细介绍每种类型的测试。

让我们简单的看一下不同类型的测试:

  1. 单元测试: 单元测试是您可以进行的最低级别的测试。通常是在类内部测试方法。单元测试不直接与其他类交互,而是与模拟交互。这使单元测试变得孤立,并且易于调试和重构。

  2. 集成测试: 集成测试涉及多个类别。因此,它测试了类之间的集成,即依赖关系。它用于测试数据库是否为我们提供了正确的结果,外部 API 是否为我们提供了正确的数据等。它用于测试实际的类和功能,而不是使用模拟。与运行的单元测试相比,它要慢得多,因为它们与数据库和外部提供程序进行交互。

  3. 功能测试: 功能测试是一种测试整个功能的测试,可能需要很多依赖。通常,您将测试路由以获取正确的响应,或者测试与应用程序中某些功能相关的 Controller 方法。它们比集成测试慢,因为它们涉及更多的依赖关系。

  4. 验收测试: 验收测试是最高级别的测试。它只关心该功能是否可以通过客户的有利位置工作。测试流程通过网站单击并提交表格,并期望得到正确的结果。为此,我们使用了 Selenium 之类的工具。

在下一部分中,我们将介绍如何设置 PHPUnit 并开始进行单元测试。

在下一部分中,我们将介绍如何设置 [PHPUnit(https://phpunit.de/) 并开始单元测试。刚开始我们将不遵循 TDD 方法。因为在刚开始学习如何测试时,很难同时掌握这两个概念。等我们习惯了编写测试,我们再遵循 TDD ,所以我们把它留到后面再讲。 :)

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@sameernyaupane/php-t...

译文地址:https://learnku.com/php/t/41484

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!