在Laravel中编写单元测试是保障代码质量的重要手段。框架默认集成了PHPUnit,并提供了便捷的artisan命令来生成和执行测试,让开发者可以专注于业务逻辑验证而非测试环境搭建。

如何生成测试文件
使用Laravel自带的命令行工具可以快速创建测试类。打开终端进入项目根目录,执行以下命令生成一个单元测试类:
# 创建名为 ExampleTest 的单元测试 php artisan make:test ExampleTest --unit
该命令会在 tests/Unit 目录下生成对应的测试文件,初始内容包含基本的测试模板。
编写第一个单元测试
假设我们有一个简单的服务类负责计算两数之和,下面演示如何为它编写单元测试。首先创建服务类:
<?php
namespace AppServices;
class Calculator
{
public function add(int $a, int $b): int
{
return $a + $b;
}
}
接着在 tests/Unit/ExampleTest.php 中编写测试方法:
<?php
namespace TestsUnit;
use PHPUnitFrameworkTestCase;
use AppServicesCalculator;
class ExampleTest extends TestCase
{
public function test_add_method_returns_correct_sum()
{
$calculator = new Calculator();
$result = $calculator->add(2, 3);
$this->assertEquals(5, $result);
}
}
常用断言方法
PHPUnit提供了丰富的断言函数来检查结果,下面列出几个在Laravel单元测试里经常用到的:
- assertEquals:判断两个值是否相等
- assertTrue:判断条件是否为真
- assertNull:判断值是否为空
- assertInstanceOf:判断对象是否属于某类
运行测试
编写完成后,在项目根目录执行如下命令即可运行全部单元测试:
php artisan test --testsuite=Unit
如果只想运行单个文件,可以指定路径:
php artisan test tests/Unit/ExampleTest.php
数据库相关单元测试
当测试涉及数据库操作时,建议使用 RefreshDatabase trait 来避免脏数据。示例:
<?php
namespace TestsUnit;
use TestsTestCase;
use IlluminateFoundationTestingRefreshDatabase;
use AppModelsUser;
class UserTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_be_created()
{
$user = User::factory()->create(['name' => 'test']);
$this->assertDatabaseHas('users', ['name' => 'test']);
}
}
通过上述方式,我们能够在Laravel中规范地编写并运行单元测试,从而提升代码的稳定性与可维护性。