PHPUnit 测试与调试
封面图
•
2026-04-11
•
PHP
18
0
0
0
PHPUnit 是 PHP 语言中广泛使用的单元测试框架,用于编写和运行单元测试,以确保代码的正确性和稳定性。在开发过程中,使用 PHPUnit 可以帮助你更早地发现错误、提高代码质量,并支持持续集成(CI)流程。 以下是关于 **PHPUnit 测试与调试** 的详细指南: --- ## 一、安装 PHPUnit ### 1. 使用 Composer 安装 ```bash composer require --dev phpunit/phpunit ``` ### 2. 验证安装 ```bash vendor/bin/phpunit --version ``` --- ## 二、编写第一个 PHPUnit 测试 ### 1. 创建被测类(例如 `Calculator.php`) ```php <?php class Calculator { public function add($a, $b) { return $a + $b; } } ``` ### 2. 创建测试类(例如 `CalculatorTest.php`) ```php <?php use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function testAdd() { $calculator = new Calculator(); $this->assertEquals(5, $calculator->add(2, 3)); } } ``` ### 3. 运行测试 ```bash vendor/bin/phpunit CalculatorTest.php ``` --- ## 三、常用断言方法 | 方法 | 描述 | |------|------| | `$this->assertEquals($expected, $actual)` | 检查两个值是否相等 | | `$this->assertTrue($condition)` | 检查条件为真 | | `$this->assertFalse($condition)` | 检查条件为假 | | `$this->assertNull($value)` | 检查值为 null | | `$this->assertNotNull($value)` | 检查值不为 null | | `$this->assertContains($element, $array)` | 检查数组包含某元素 | | `$this->expectException(Exception::class)` | 检查是否抛出异常 | --- ## 四、测试用例组织 ### 1. 使用 `setUp()` 和 `tearDown()` 在每个测试方法之前/之后执行某些操作。 ```php protected function setUp(): void { $this->calculator = new Calculator(); } protected function tearDown(): void { unset($this->calculator); } ``` ### 2. 参数化测试(使用 `@dataProvider`) ```php public function additionProvider() { return [ [1, 1, 2], [2, 3, 5], [0, 0, 0] ]; } /** * @dataProvider additionProvider */ public function testAdd($a, $b, $expected) { $this->assertEquals($expected, $this->calculator->add($a, $b)); } ``` --- ## 五、调试 PHPUnit 测试 ### 1. 输出调试信息 可以在测试中使用 `var_dump()` 或 `print_r()`: ```php public function testDebug() { $result = $this->calculator->add(2, 3); var_dump($result); // 调试输出 $this->assertEquals(5, $result); } ``` ### 2. 使用 Xdebug 调试 - 在 PhpStorm 或 VSCode 中配置 Xdebug。 - 设置断点并启动调试模式: ```bash vendor/bin/phpunit --xdebug ``` ### 3. 查看测试结果日志 PHPUnit 会自动输出测试结果到终端。也可以通过配置生成 XML 报告: ```bash vendor/bin/phpunit --coverage-text --coverage-html=report/ ``` --- ## 六、常见问题与解决 ### 1. `Class not found` 错误 - 确保类文件路径正确。 - 使用 `require_once` 或 Composer 自动加载。 ### 2. 测试失败但预期正确? - 检查断言是否正确。 - 检查被测类是否有逻辑错误。 ### 3. 无法看到详细错误信息? - 添加 `--verbose` 参数查看详细输出: ```bash vendor/bin/phpunit --verbose ``` --- ## 七、最佳实践 - 保持测试独立,不要依赖外部数据或环境。 - 使用 mock 对象来模拟依赖项(如数据库、API)。 - 每个测试只验证一个功能点。 - 将测试与生产代码分离,通常放在 `tests/` 目录下。 --- ## 八、扩展功能 ### 1. 使用 Mock Objects ```php $mock = $this->createMock(SomeClass::class); $mock->method('someMethod')->willReturn('mocked'); ``` ### 2. 使用 Test Suites 创建 `phpunit.xml` 文件定义测试套件: ```xml <phpunit> <testsuites> <testsuite name="My Application"> <directory>./tests</directory> </testsuite> </testsuites> </phpunit> ``` 然后运行: ```bash vendor/bin/phpunit ``` --- ## 九、参考文档 - [PHPUnit 官方文档](https://phpunit.de/documentation.html) - [PHPUnit GitHub 项目](https://github.com/sebastianbergmann/phpunit) --- 如果你有具体的测试问题或需要帮助写某个测试用例,欢迎随时告诉我!
上一篇:
php API 请求签名
标题录入,一次不能超过6条
留言
评论