PHPUnit for PHP: 完整指南及示例

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

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

开始课程

什么是 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); }\

推荐