测试与静态分析
Pest、PHPCS、Phan、Xdebug。
30 分钟
测试与静态分析
可维护的 PHP 项目离不开 自动化测试与代码质量工具。本课介绍 Pest、PHPCS、Phan 与 Xdebug。前置 php-essentials;路径 /roadmaps/php。
学习目标
- 用 Pest 编写单元测试与断言
- 用 PHPCS 统一代码风格
- 了解 Phan 静态分析与 Xdebug 调试
Pest 单元测试
composer require pestphp/pest --dev
./vendor/bin/pest --init
// tests/LessonServiceTest.php
use App\Service\LessonService;
test('returns lesson by slug', function () {
$repo = Mockery::mock(LessonRepository::class);
$repo->shouldReceive('findBySlug')->with('pha-tooling')->andReturn([
'slug' => 'pha-tooling', 'title' => '测试与静态分析', 'order' => 9,
]);
$service = new LessonService($repo);
$lesson = $service->get('pha-tooling');
expect($lesson)->not->toBeNull()
->and($lesson->slug)->toBe('pha-tooling');
});
Pest 语法简洁;底层基于 PHPUnit,CI 可直接 ./vendor/bin/pest。
PHPCS 代码风格
composer require squizlabs/php_codesniffer --dev
./vendor/bin/phpcs --standard=PSR12 src/
./vendor/bin/phpcbf --standard=PSR12 src/ # 自动修复
团队统一 PSR-12,减少 code review 中的格式争论。
Phan 静态分析
composer require phan/phan --dev
./vendor/bin/phan
Phan 在运行前发现类型错误、未定义变量等问题;PHPStan 是同类替代。
Xdebug 调试
php.ini 启用 Xdebug 3:
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.client_port=9003
IDE 设置断点,浏览器带 XDEBUG_TRIGGER=1 即可单步调试。
练习
- 为
LessonService::get写成功与「未找到」两个 Pest 测试 - 运行 PHPCS,修复 src 下所有 PSR-12 违规
- 用 Xdebug 断点调试一次 POST 表单处理流程
小结
Pest 保行为、PHPCS 保风格、Phan 保类型、Xdebug 查运行时。 下一课框架生态。
加载本节练习…