此包已被废弃且不再维护。未建议替代包。

虚拟数据工厂

v1.0.0 2018-10-16 06:19 UTC

This package is auto-updated.

Last update: 2022-11-08 11:37:09 UTC


README

Build Status

一个简单的库,用于快速生成假数据

你是否遇到过需要为测试创建模拟数据的情况?为大量实体实例化并传递所有必要的参数?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