# testing **Repository Path**: fiberphp/testing ## Basic Information - **Project Name**: testing - **Description**: 🧪 FiberPHP 测试辅助组件 —— 提供测试基类、断言扩展、数据库迁移辅助,基于 PHPUnit,开箱即用。 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-23 - **Last Updated**: 2026-11-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FiberPHP Testing PHPUnit 测试助手,提供 TestCase 基类、HTTP / 数据库测试 trait 与模型工厂。`setUp` 阶段自动引导框架环境,事务包裹保证测试隔离。 ## 环境要求 - PHP >= 8.5 - `fiberphp/framework` dev-master - `phpunit/phpunit` ^11.0 - 可选 `fiberphp/http`:HTTP 测试(TestResponse / HttpClient) - 可选 `fiberphp/database`:数据库测试(事务隔离 / 工厂) - 可选 `faker/faker`:工厂真实假数据(缺失时回退内置 SimpleFaker) ## 安装 ```bash composer require --dev fiberphp/testing ``` ## 快速开始 继承 `TestCase` 即可在测试中使用框架能力: ```php namespace tests; use FiberPHP\Testing\TestCase; use FiberPHP\Testing\Concern\HttpTest; class ExampleTest extends TestCase { use HttpTest; public function test_index(): void { $response = $this->get('/users'); $response->assertStatus(200); } } ``` ### 数据库测试(事务自动回滚) ```php use FiberPHP\Testing\TestCase; use FiberPHP\Testing\Concern\DatabaseTest; class UserTest extends TestCase { use DatabaseTest; public function test_create(): void { $db = $this->db(); // 测试内复用同一连接 $db->table('users')->insert(['name' => 'tom']); // tearDown 后自动回滚,不影响其他测试 } } ``` ### 模型工厂 ```php use FiberPHP\Testing\Factory; // 定义工厂 Factory::define(User::class, fn ($faker) => [ 'name' => $faker->name(), 'email' => $faker->email(), ]); // 定义状态 Factory::state(User::class, 'admin', fn ($faker) => ['is_admin' => true]); // 构建并持久化 $user = Factory::make(User::class)->create(); $admin = Factory::make(User::class)->state('admin')->create(); ``` ## 特性 | 能力 | 说明 | |------------|------------------------------------------------------------------------| | 框架引导 | `setUp` 自动 `App::bootstrap`,仅引导一次后跨测试复用 | | 事务隔离 | `DatabaseTest` trait 包裹事务,tearDown 自动回滚 | | HTTP 测试 | `HttpTest` trait 提供 get/post/put/delete 快捷方法与 TestResponse 断言 | | 路由重建 | 动态注册路由后可重建 dispatcher / 重置路由静态状态 | | 模型工厂 | `Factory` 注册中心 + `FactoryBuilder` 流式构造,支持状态与 Faker | | Faker 降级 | `faker/faker` 缺失时回退内置 `SimpleFaker`,零额外依赖也能用 | ## License MIT License (c) 2026 庞斌,详见 [LICENSE](LICENSE)。