TDD在PHP中:测试如何将代码变成艺术

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么你的代码值得尊重(以及测试)

\n\n

想象一下:你编写代码,它运行正常,一切完美。但一个月后你回到项目,添加一个新功能——然后突然一切都崩溃了。熟悉吗?如果是这样,那么TDD在PHP中正是你所需要的。测试驱动开发(Test-Driven Development)不仅仅是一种流行趋势,更是一种改变对代码态度的哲学。在本文中,我们将探讨TDD如何将混乱变为秩序,将错误变为过去的遗迹。你将学习如何编写真正节省时间的PHP测试,并通过代码示例看到这一点。开始吧!

\n\n

什么是TDD,为什么在PHP中需要它?

\n\n

TDD在PHP中是一种方法论,你先编写测试,然后编写通过该测试的代码。听起来很奇怪?实际上这很天才。与其猜测你的代码是否有效,你获得即时反馈。TDD的基本原则:

\n\n
    \n
  • 红色 — 编写一个失败的测试(因为代码尚未编写)。
  • \n
  • 绿色 — 编写最少的代码使测试通过。
  • \n
  • 重构 — 在不破坏测试的情况下改进代码。
  • \n
\n\n

这个循环一遍又一遍地重复。在PHP中,TDD特别有用,因为该语言常用于Web应用程序,错误可能代价高昂。基于PHPUnit(主要的测试框架)的测试有助于避免回归,并使代码透明。另外,TDD让你自律:你在编写代码之前就开始思考设计。

\n\n

配置PHP测试环境

\n\n

在深入示例之前,让我们准备好环境。对于PHP测试驱动开发,我们需要PHPUnit。安装很简单:

\n\n
composer require --dev phpunit/phpunit ^10
\n\n

在项目根目录创建一个tests文件夹。在里面创建一个文件CalculatorTest.php。确保你安装了PHP 8.0+。现在一切就绪,可以进行第一个测试了。

\n\n

第一个测试:用TDD编写计算器

\n\n

让我们创建一个简单的计算器。首先是测试。这是一个经典的面向初学者的TDD PHP示例。

\n\n

步骤1:红色(编写失败的测试)

\n\n

创建tests/CalculatorTest.php:

\n\n
<?php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n    public function testAddition()\n    {\n        $calculator = new Calculator();\n        $result = $calculator->add(2, 3);\n        $this->assertEquals(5, $result);\n    }\n}
\n\n

运行测试:

\n\n
./vendor/bin/phpunit tests/CalculatorTest.php
\n\n

预期错误:Class "Calculator" not found。一切按计划进行——这是红色阶段。

\n\n

步骤2:绿色(编写最少的代码)

\n\n

创建src/Calculator.php:

\n\n
<?php\n\nclass Calculator\n{\n    public function add(int $a, int $b): int\n    {\n        return $a + $b;\n    }\n}
\n\n

别忘了在测试中引入自动加载:

\n\n
require_once __DIR__ . '/../src/Calculator.php';
\n\n

再次运行测试——绿色!现在进行重构。在这个阶段代码很简单,但稍后你可以改进它,而不必担心破坏它。

\n\n

步骤3:充满信心地重构

\n\n

假设我们想添加类型检查。修改代码:

\n\n
public function add(int $a, int $b): int\n{\n    if (!is_int($a) || !is_int($b)) {\n        throw new InvalidArgumentException('Only integers allowed');\n    }\n    return $a + $b;\n}
\n\n

运行测试——它们仍然通过。TDD让你有勇气进行实验。

\n\n

高级TDD:处理异常和模拟

\n\n

当你掌握了基础之后,转向复杂场景。例如,测试异常。在PHP单元测试中,这是

博客

书籍推荐