什么是 PHPUnit 以及为什么需要它?
PHPUnit 是一个用于 PHP 语言的单元测试框架。它是 xUnit 家族的一部分,为开发者提供自动化检查程序各个组件(类、方法、函数)工作状态的工具。
为什么需要 PHPUnit?
- 早期发现错误:每次代码更改后运行测试,可以立即发现回归问题。
- 代码文档:编写良好的测试可作为活文档,展示某个方法应如何工作。
- 无惧重构:您可以放心地重写代码,因为测试能确保现有功能不被破坏。
- 支持 TDD(测试驱动开发):一种先编写测试,再编写最少代码使其通过的方法论。
- 与 CI/CD 集成:PHPUnit 可以轻松嵌入持续集成管道(GitHub Actions、GitLab CI、Jenkins)。
PHPUnit 支持模拟对象(mock)、测试夹具(测试数据集)、代码覆盖率(code coverage)以及许多其他高级功能。
安装 PHPUnit
PHPUnit 通过 Composer(PHP 的依赖管理器)安装。如果您还没有 Composer,请从官方网站 getcomposer.org 安装。
全局安装(推荐用于 CLI)
composer global require phpunit/phpunit之后,请确保 Composer 全局包目录已添加到 PATH。检查安装:
phpunit --version本地安装(在项目内)
composer require --dev phpunit/phpunit之后,PHPUnit 可通过 vendor/bin/phpunit 使用。
安装特定版本
composer require --dev phpunit/phpunit:^10.0重要:PHPUnit 的版本必须与您项目中的 PHP 版本匹配。例如,PHPUnit 10 需要 PHP 8.1 或更高版本。
快速入门及代码示例
让我们创建一个简单的类 Calculator.php 并为其编写测试。
步骤 1. 创建待测试的类
<?php// src/Calculator.php
class Calculator{ public function add(int $a, int $b): int { return $a + $b; }
public function subtract(int $a, int $b): int { return $a - $b; }
public function multiply(int $a, int $b): int { return $a * $b; }
public function divide(int $a, int $b): float { if ($b === 0) { throw new \\InvalidArgumentException("Division by zero"); } return $a / $b; }}步骤 2. 创建测试类
<?php// tests/CalculatorTest.php
use PHPUnit\\Framework\\TestCase;
class CalculatorTest extends TestCase{ private Calculator $calculator;
protected function setUp(): void { $this->calculator = new Calculator(); }
public function testAdd(): void { $result = $this->calculator->add(2, 3); $this->assertEquals(5, $result); }
public function testSubtract(): void { $result = $this->calculator->subtract(10, 4); $this->assertEquals(6, $result); }
public function testMultiply(): void { $result = $this->calculator->multiply(3, 4); $this->assertEquals(12, $result); }
public function testDivide(): void { $result = $this->calculator->divide(10, 2); $this->assertEquals(5.0, $result); }\