单元测试用于验证最小可测试单元的正确性,Laravel通过PHPUnit支持测试;使用php artisan make:test MathHelperTest --unit创建测试类,并在tests/Unit/MathHelperTest.php中编写测试方法验证MathHelper::add()结果是否符合预期。
在 Laravel 中进行单元测试和功能测试是保证应用质量的重要手段。Laravel 基于 PHPUnit 构建了完整的测试支持,让你可以轻松编写和运行测试。下面介绍如何在 Laravel 中进行单元测试与功能测试,包括基本用法、常见断言和实际操作示例。
单元测试用于验证应用程序中最小的可测试单元,比如一个类或方法是否按预期工作。在 Larav
el 中,单元测试通常不加载整个框架,只测试独立逻辑。
php artisan make:test MathHelperTest --unit这会在 tests/Unit 目录下生成 MathHelperTest.php。 2. 编写简单单元测试
namespace App\Helpers;
class MathHelper
{
public static function add($a, $b)
{
return $a + $b;
}
}
对应的测试代码如下:
assertEquals(5, $result);
}
}
注意:单元测试类不应使用 RefreshDatabase 或数据库相关 Trait,以保持轻量。
功能测试用于测试应用程序的实际行为,例如 HTTP 请求、路由、中间件、数据库交互等。它模拟用户操作,验证整个流程是否正常。
1. 创建功能测试php artisan make:test UserRegistrationTest该命令会在 tests/Feature 目录下创建测试文件。 2. 测试用户注册流程
post('/register', [
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => 'password',
'password_confirmation' => 'password',
]);
// 断言状态码为 302(重定向)或 201(创建成功)
$response->assertRedirect('/dashboard');
// 验证数据库中存在该用户
$this->assertDatabaseHas('users', [
'email' => 'john@example.com'
]);
}
}
常用功能测试方法:
使用 PHPUnit 运行所有测试:
php artisan test或运行特定测试文件:
php artisan test tests/Feature/UserRegistrationTest.php你也可以使用原生 PHPUnit 命令(需安装):
./vendor/bin/phpunit
功能测试常涉及数据库操作,推荐使用 RefreshDatabase Trait,它会在测试前后迁移并清空数据,确保测试隔离。
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
use RefreshDatabase;
}
避免使用 DatabaseTransactions,因为它在某些场景下可能不可靠。
基本上就这些。Laravel 的测试系统开箱即用,配合合理的断言和结构,能有效提升代码可靠性。