mar*_*nuy 17 python factory django-testing faker factory-boy
Factory_boy用于fake-factory (Faker)生成随机值,我想直接使用Faker在我的Django测试中生成一些随机值.
Factory_boy文档建议使用factory.Faker及其提供者:
class RandomUserFactory(factory.Factory):
class Meta:
model = models.User
first_name = factory.Faker('first_name')
Run Code Online (Sandbox Code Playgroud)
但这不会产生任何名称:
>>> import factory
>>> factory.Faker('name')
<factory.faker.Faker object at 0x7f1807bf5278>
>>> type(factory.Faker('name'))
<class 'factory.faker.Faker'>
Run Code Online (Sandbox Code Playgroud)
从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'
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以使用Faker而不是直接设置实例Faker?
from faker import Factory
fake = Factory.create()
fake.name()
Run Code Online (Sandbox Code Playgroud)
小智 13
你可以使用faker和factory_boy这样:
class RandomUserFactory(factory.Factory):
class Meta:
model = models.User
first_name = factory.Faker('first_name')
user = RandomUserFactory()
print user.first_name
# 'Emily
Run Code Online (Sandbox Code Playgroud)
所以你需要用factory_boy实例化一个用户,它会为你调用Faker.
我不知道您是否尝试使用Django,但如果您希望工厂将创建的用户保存到数据库,则需要扩展factory.django.DjangoModelFactory而不是factory.Factory.
UPD您通常应该更喜欢其他两个答案之一,因为这个答案使用私有接口,并且该generate()解决方案仅适用于factory-boy<3.1.0.
一个更简单的方法是使用未记录的generate()方法 ( factory-boy<3.1.0):
import factory
print(factory.Faker('random_int').generate({}))
Run Code Online (Sandbox Code Playgroud)
或_get_faker():
print(factory.Faker._get_faker().random_int())
Run Code Online (Sandbox Code Playgroud)
您可以查看其他答案以获得更详细的示例。
我知道这是一个古老的问题,但对于可能遇到此问题的任何人,这是您可以使用的另一种方法。
>>> from factory.faker import faker
>>> FAKE = faker.Faker()
>>> FAKE.name()
'Scott Rodriguez'
>>> FAKE.address()
'PSC 5061, Box 1673\nAPO AP 53007'
>>>
Run Code Online (Sandbox Code Playgroud)