apie/faker

apie库的Composer包:faker

dev-main 2022-09-07 14:01 UTC

This package is auto-updated.

Last update: 2024-09-17 20:56:08 UTC


README

faker

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require Code coverage

PHP Composer

此包是Apie库的一部分。代码维护在一个monorepo中,所以PR需要发送到monorepo

文档

此包为库Faker添加了一个方法,用于伪造领域对象和价值对象的内容。

由于其递归性质,这是最简单的设置

<?php
use Apie\Faker\ApieObjectFaker;
use Faker\Factory;

$faker = Factory::create();
$faker->addProvider(ApieObjectFaker::createWithDefaultFakers($faker));

// returns a random Gender enum value.
$faker->fakeClass(Gender::class);

class User implements EntityInterface
{
    // ...
    public function __construct(private Gender $gender, private FirstName $firstName, private LastName $lastName)
    {
    }
}
// creates a User with random constructor arguments.
$faker->fakeClass(User::class);

使用正则表达式的字符串值对象。

具有特质IsStringWithRegexValueObject并实现HasRegexValueObjectInterface的字符串值对象可以通过使用正则表达式轻松伪造为有效的值对象。

添加自定义支持

您可以创建一个实现ApieClassFaker的类来创建自己的伪造方法。您可以重用Faker本身中可用的方法。

<?php
use Apie\Faker\Interfaces\ApieClassFaker;
use Faker\Generator;
use ReflectionClass;

class SpecificClassFaker implements ApieClassFaker
{
    public function supports(ReflectionClass $class): bool
    {
        return $class->name === SpecificValueObject::class;
    }
    public function fakeFor(Generator $generator, ReflectionClass $class): SpecificValueObject
    {
        return new SpecificValueObject($generator->randomElement([1, 2, 3]));
    }
}

在对象本身中添加一个createRandom方法。

您不需要创建许多ApieClassFaker方法,您可以在值对象上创建一个将生成随机值对象的方法。

<?php
use Apie\Core\Attributes\FakeMethod;
use Apie\Core\ValueObjects\Interfaces\ValueObjectInterface;

#[FakeMethod("createRandom")]
class SpecificClass implements ValueObjectInterface
{
    public static function createRandom(): self
    {
        return new self(rand(1, 3));
    }
}

您也可以为此方法或Faker生成器本身提供参数

<?php
use Apie\Core\Attributes\FakeMethod;
use Apie\Core\ValueObjects\Interfaces\ValueObjectInterface;
use Faker\Generator;

#[FakeMethod("createRandom")]
class SpecificClass implements ValueObjectInterface
{
    public static function createRandom(Generator $generator, int $maximum): self
    {
        return new self($generator->numberBetween(1, $maximum));
    }
}

在这种情况下,调用 $faker->fakeClass(SpecificClass::class); 将运行 SpecificClass::createRandom(),并带有Faker和一个随机整数。