必须从开发初期运行可重复、可隔离的单元测试以验证业务逻辑;使用 php artisan make:test UserServiceTest --unit 创建测试类,继承 TestCase 基类;编写以 test_ 开头的方法并调用 assertEquals 断言;通过 php artisan test --filter UserServiceTest 运行测试,确保被测类已实现。

要在Laravel项目中快速验证业务逻辑是否正确,避免上线后出现计算错误、状态异常或数据写入失败等问题,必须从开发初期就运行可重复、可隔离的单元测试。
创建第一个单元测试类
打开终端,进入 Laravel 项目根目录,执行 Artisan 命令生成测试文件:
php artisan make:test UserServiceTest --unit
该命令会在 tests/Unit 目录下创建 UserServiceTest.php 文件,并自动继承 Tests\TestCase 基类。这一步不能跳过——如果手动新建文件而未继承 TestCase,后续所有数据库辅助方法(如 assertDatabaseHas)和应用上下文都将不可用。
编写可执行的测试方法
打开刚生成的 tests/Unit/UserServiceTest.php,删除默认的 testExample 方法,添加一个以 test_ 开头的方法:
public function test_it_calculates_user_age_correctly()
{
$service = new \App\Services\UserService();
$age = $service->calculateAge('1995-08-22');
$this->assertEquals(31, $age);
}
注意:方法名必须以 test_ 开头,否则 PHPUnit 不会识别为测试用例;断言值 31 是基于当前时间(2026年8月6日)计算得出,若测试运行日期跨年,需同步更新预期值,否则断言失败。
运行单元测试并查看结果
在项目根目录下直接运行:
php artisan test --filter UserServiceTest
这条命令只运行 UserServiceTest 类中的全部测试方法,比全量执行更快,适合开发调试阶段。若看到绿色的点(.)和 “Tests: 1 passed” 提示,说明测试通过。
如果报错 Class 'App\Services\UserService' not found,说明该服务类尚未创建——【必须先实现被测类,再写测试】,不能倒置顺序。


















