tijmen-wierenga / bogus
此包已被废弃且不再维护。未建议替代包。
虚拟数据工厂
v1.0.0
2018-10-16 06:19 UTC
Requires
- php: ^7.2
Requires (Dev)
- phpstan/phpstan: ^0.10.3
- phpunit/phpunit: ^7.4
- squizlabs/php_codesniffer: ^3.3
This package is auto-updated.
Last update: 2022-11-08 11:37:09 UTC
README
一个简单的库,用于快速生成假数据
你是否遇到过需要为测试创建模拟数据的情况?为大量实体实例化并传递所有必要的参数?Bogus 可以通过为你的实体创建一个非常简单的工厂来帮助你。每个工厂都将为你提供定义默认(随机)和可覆盖属性的功能。
操作非常简单
$fixtures = new Fixtures(new UserFactory()); $users = $fixtures->create(User::class, ['city' => 'Amsterdam'], 5); // Generates 5 users from Amsterdam
安装
安装 Bogus 最简单和推荐的方式是使用 Composer。在你的项目根目录(其中包含 composer.json
文件)运行以下命令:
composer require --dev tijmen-wierenga/bogus
通常你只想在开发环境中使用此包,但如果你想在生产环境中使用它,只需运行命令而不使用 --dev
标志。
composer require tijmen-wierenga/bogus
使用方法
Fixtures
类包含一个方法
final class Fixtures { public function create(string $entityClassName, iterable $attributes, int $amount): Collection; }
这意味着你将始终调用此方法来生成固定值。实现方式高度可配置。
工厂
通过工厂创建随机数据。实现工厂的最简单方式是通过扩展 AbstractFactory。
use TijmenWierenga\Bogus\Factory\AbstractFactory; final class UserFactory extends AbstractFactory { /** * Whether or not the Factory creates the entity passed as an argument */ public function creates(string $entityClassName): bool { return $entityClassName === User::class; } /** * An iterable list of key => value pairs with default values. The result of the merged attributes * is passed to the 'create' method. */ protected function attributes(): iterable { $factory = \Faker\Factory::create(); return [ "name" => $factory->firstName, "email" => $factory->email ]; } /** * Creates the actual entity based on the merged attributes */ protected function create(iterable $attributes): object { return new User($attributes["name"], $attributes["email"]); } } class User { public function __construct(string $name, string $email) { $this->name = $name; $this->email = $email; } }
接下来,将 Factory 注册到 Fixtures 基类。
$fixtures = new Fixtures(new UserFactory()); // Use it $fixtures->create(User::class); // Returns a Collection with a random user instance
查看完整的 示例。
覆盖属性
如果你想覆盖一个随机属性,你可以提供一个键值列表以进行覆盖。
$user = $fixtures->create(User::class, [ "name" => "Tijmen" ]); // Will create a user with Tijmen as a name and a random email address
一次性创建多个实体
$users = $fixtures->create(User::class, [], 3); // Will create 3 random users