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')
但这并没有产生任何名称:
>>> 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()
答案 0 :(得分: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
所以你需要用factory_boy实例化一个用户,它会为你调用Faker。
我不知道你是否试图将它与Django一起使用, 但是如果您希望工厂将创建的用户保存到数据库, 那么你需要扩展factory.django.DjangoModelFactory而不是factory.Factory。
答案 1 :(得分:3)
我知道这是一个古老的问题,但对于可能遇到此问题的任何人,这是您可以使用的另一种方法。
>>> from factory.faker import faker
>>> FAKE = faker.Faker()
>>> FAKE.name()
'Scott Rodriguez'
>>> FAKE.address()
'PSC 5061, Box 1673\nAPO AP 53007'
>>>
答案 2 :(得分:1)
一种更简单的方法是使用未公开的generate()
方法:
import factory
print(factory.Faker('random_int').generate({}))
或_get_faker()
:
print(factory.Faker._get_faker().random_int())
您可以查看the other answer以获得更详细的示例。
答案 3 :(得分:0)
首先,如果要将created() {
const originalPush = this.myarray.push;
const originalSplice = this.myarray.splice;
this.myarray.push = (...args) => {
//do something with args
return originalPush.apply(this.myarray, args);
};
this.myarray.splice = (...args) => {
//do something with args
return originalSplice.apply(this.myarray, args);
};
//any more array methods you want to intercept
},
与Django模型一起使用,则应按原样使用recommended的factory_boy
。
第二,DjangoModelFactory
也suggests使用factory_boy
属性声明,以便轻松定义外观逼真的工厂。 (see providers)
Faker
一旦定义了工厂,就可以按如下所示简单使用它:
class RandomUserFactory(factory.DjangoModelFactory):
class Meta:
model = 'myapp.User' # Equivalent to model = myapp.models.User
first_name = factory.Faker('first_name')