apie / faker
apie库的Composer包:faker
dev-main
2022-09-07 14:01 UTC
Requires
- php: >=8.1
- apie/core: dev-main
- fakerphp/faker: ^1.19
- niklongstone/regex-reverse: ^0.4.0
Requires (Dev)
- apie/common-value-objects: dev-main
- apie/date-value-objects: dev-main
- apie/fixtures: dev-main
- apie/text-value-objects: dev-main
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5
- symfony/finder: 6.*
This package is auto-updated.
Last update: 2024-09-17 20:56:08 UTC
README
faker
此包是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和一个随机整数。