Factory_boy
使用fake-factory (Faker)
生成随机值,我想在Django测试中直接使用Faker生成一些随机值。
Factory_boy docs建议使用factory.Faker
及其提供程序:
class RandomUserFactory(factory.Factory):
class Meta:
model = models.User
first_name = factory.Faker('first_name')
但这不会生成任何名称:
>>> import factory
>>> factory.Faker('name')
<factory.faker.Faker object at 0x7f1807bf5278>
>>> type(factory.Faker('name'))
<class 'factory.faker.Faker'>
从factory_boy
faker.py
类factory.Faker('ean', length=10)
调用faker.Faker.ean(length=10)
,但是Faker
文档说它应该显示一个名称:
from faker import Faker
fake = Faker()
fake.name()
# 'Lucy Cechtelar'
除了直接从Faker
设置示例之外,是否还有其他方法可以使用Faker
?
from faker import Factory
fake = Factory.create()
fake.name()
5条答案
按热度按时间atmip9wb1#
可以像这样将faker与factory_boy一起使用:
因此,您需要使用factory_boy示例化一个用户,它将为您调用Faker。
我不知道您是否会尝试在Django中使用这个函数,但是如果您希望工厂将创建的用户保存到数据库中,那么您需要扩展factory.django.DjangoModelFactory而不是factory.Factory。
66bbxpm52#
我知道这是一个老问题,但对于任何可能遇到这个问题的人,这里有另一种方法,你可以使用。
xmd2e60i3#
factory_boy
不提供公共/文档化的接口来访问它使用的Faker
示例,所以最好创建一个单独的接口,但如果你真的需要:您也可以使用
generate()
/evaluate()
,但接口会随时间而变化:您还可以查看the other answer以获得更详细的示例。
qnakjoqk4#
首先,如果你想在Django模型中使用
factory_boy
,你应该使用推荐的DjangoModelFactory
。其次,
factory_boy
还建议使用Faker
属性声明,以便轻松定义看起来逼真的工厂。一旦定义了工厂,就可以简单地按如下方式使用它:
sauutmhj5#
正如其他答案已经阐明的那样,使用Faker的正确/通常方式是与工厂一起使用,然而,能够内联使用Faker偶尔也会有用,这似乎是这里的根本问题。
以下是2022年及最新factoryboy版本的更新答案: