我用 force=False 重写了模型中的 Save 方法,如何使用 factory boy 来模拟 Django 模型?
I have overriden the Save method in a model with force=False, how do I use factoryboy to mock the Django model?
例如,看下面的代码:
class Thing(Model):
def save(force=False, *args, **kwargs):
if not force:
raise Exception("don't save!")
FactoryBoy 调用 model.get_or_create(),后者调用 model.save()。有没有办法在不修改保存或 get_or_create 方法的情况下在 FactoryBoy 中创建此模型的实例?
如果您只需要一个 Django 模型的本地实例,您应该使用 build strategy. Also, the create strategy invokes _create
method,它可以被覆盖以满足您的需要。
factory.django.DjangoModelFactory
的默认行为是调用 MyModel.objects.create()
。
如果目标只是一次测试中的单个调用,只需使用 MyModelFactory.build()
。
如果目标是从不调用create()
,请在您的声明中设置以下内容:
class MyModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.MyModel
strategy = factory.BUILD_STRATEGY
这将 MyModelFactory()
映射到 MyModelFactory.build()
,而不是默认的 DjangoModelFactory
,MyModelFactory.create()
。
例如,看下面的代码:
class Thing(Model):
def save(force=False, *args, **kwargs):
if not force:
raise Exception("don't save!")
FactoryBoy 调用 model.get_or_create(),后者调用 model.save()。有没有办法在不修改保存或 get_or_create 方法的情况下在 FactoryBoy 中创建此模型的实例?
如果您只需要一个 Django 模型的本地实例,您应该使用 build strategy. Also, the create strategy invokes _create
method,它可以被覆盖以满足您的需要。
factory.django.DjangoModelFactory
的默认行为是调用 MyModel.objects.create()
。
如果目标只是一次测试中的单个调用,只需使用 MyModelFactory.build()
。
如果目标是从不调用create()
,请在您的声明中设置以下内容:
class MyModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.MyModel
strategy = factory.BUILD_STRATEGY
这将 MyModelFactory()
映射到 MyModelFactory.build()
,而不是默认的 DjangoModelFactory
,MyModelFactory.create()
。