jefferson-lima / fixture-factory
1.0.0
2020-06-24 22:32 UTC
Requires
- doctrine/annotations: ^1.10
- doctrine/orm: ^2.7
- fzaninotto/faker: ^1.9
- phpdocumentor/reflection-docblock: ^5.1
- symfony/validator: ^5.0
Requires (Dev)
- churchtools/changelogger: ^0.5.0
- friendsofphp/php-cs-fixer: ^2.16
- phpmd/phpmd: ^2.8
- phpstan/phpstan: ^0.12.25
- phpunit/phpunit: ^9
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-29 05:36:22 UTC
README
生成用于测试的固定对象。
安装
composer require jefferson-lima/fixture-factory
使用
Fixture Factory 使用类属性的元数据来生成它们的值。为属性生成的值是从其 @var
标签派生的。因此,您必须首先使用它们的类型注解属性
MyClass {
/** @var string */
public $foo;
public $bar;
}
没有 @var
标签或包含无效标签的属性将被忽略。
然后,您可以使用 FixtureFactory
为您的类创建一个固定对象
$myFixture = FixtureFactory::createFixture(MyClass::class);
Fixture Factory 使用 Faker 生成值。
支持的类型
目前支持的类型有 string
、int
、bool
、float
。如果提供了具体类,则支持对象。抽象类或接口不受支持,因为无法确定应使用哪个具体实现。嵌套对象将递归生成。
覆盖属性
可以通过将数组作为 createFixture
方法的第二个参数传递来覆盖属性
$myFixture = FixtureFactory::createFixture(MyClass::class, ['foo' => 'bar']);
循环引用
必须注意循环引用,必须避免或覆盖它们,否则将抛出异常。以下是一个循环引用的示例
class Foo {
/** @var Bar */
private $bar;
}
class Bar {
/** @var Foo */
private $foo;
}
可以通过覆盖一个属性来中断循环引用
$myFixture = FixtureFactory::createFixture(MyClass::class, ['bar' => null]);
Doctrine 注解也可以用于解决循环引用,例如
class Foo {
/**
* @var Bar
* @OneToOne(targetEntity="Bar", inversedBy="foo")
*/
private $bar;
}
class Bar {
/**
* @var Foo
* @OneToOne(targetEntity="Foo", mappedBy="bar")
*/
private $foo;
}
在这种情况下,可以确定 foo
指向 bar
,而 bar
又指向它。
Symfony 约束
还可以使用 Symfony 验证约束 来缩小为您的属性生成的值。以下是目前按优先级顺序列出的受支持的约束
字符串
某些约束不能同时应用。在这种情况下,应用优先级较高的约束。例如
/**
* @Length(min=255)
* @Email
*/
private $email;
在这种情况下,应用了 @Email
约束,而 @Length
将被忽略。
Doctrine 关联
以下 Doctrine 关联受支持
对于关联的多侧,创建一个包含两个元素的 ArrayCollection。
许可证
本项目采用 MIT 许可证 - 请参阅 LICENSE.md 文件以获取详细信息