什么是测试
测试是一种自动验证代码是否按预期运行的机制。 编写测试可以在添加或修改功能时快速确认既有行为没有被破坏。 在团队开发中,测试让你可以放心地修改和评审代码。 Laravel 从一开始就内置了对测试的支持,Pest 和 PHPUnit 都可以使用。 新安装时会自动准备好phpunit.xml 配置和 tests/ 目录。
tests/ 目录结构
Feature/:功能测试。用于包含 HTTP 请求的较大粒度测试。适合验证多对象协作、API 端点等接近整体的行为。多数测试都会写在这里。Unit/:单元测试。用于单个类或方法等小粒度测试。此处不会启动 Laravel 应用,因此不能使用数据库或其他框架功能。
创建测试
使用make:test Artisan 命令生成新的测试类。
tests/Feature/TodoTest.php。
运行测试
使用php artisan test 命令。
vendor/bin/pest 或 vendor/bin/phpunit,但 php artisan test 的输出更易读,推荐使用。
只运行特定套件:
基本测试写法
简单断言的示例:常用断言
HTTP 测试
Laravel 的 HTTP 测试无需启动真实 HTTP 服务器,就能模拟路由请求。 这是Feature/ 中最强大的能力。
检查页面显示
用get() 发送 GET 请求并校验响应。
ToDo 应用的 HTTP 测试示例
以带有Todo 模型的应用为例,测试各 CRUD 操作。
常用响应断言
使用
RefreshDatabase trait 时,每次测试执行后都会重置数据库,避免测试间数据互相干扰。测试环境
phpunit.xml 配置
在项目根目录的 phpunit.xml 中配置测试环境。默认 Session 和 Cache 使用 array 驱动,运行过程中不会留下数据。
.env.testing 文件
在项目根目录创建 .env.testing 文件,测试执行时会替代 .env 被读取。
适合分离测试专用的数据库连接或外部服务配置。
并行测试
测试数量增多时,运行时间也会变长。 可用--parallel 选项启动多个进程并行执行,从而缩短耗时。
首先安装 brianium/paratest:
--parallel:
--processes 指定:
下一步
HTTP 测试
查看请求模拟、认证测试、JSON 断言等更详细的 HTTP 测试方法。