在Factory Boy的对象工厂中重写模型@property

G P*_*tur 6 python django unit-testing factory-boy

我想找到一种方法来正确测试我的代码与Factory Boy.

有一个模型,像这样:

from django.db import models

class MyModel(models.Model):
    param1 = <some field>
    param1 = <some field>
    param1 = <some field>

    @property
    def is_smth(self):
        <some complicated code that returns boolean>
Run Code Online (Sandbox Code Playgroud)

这个型号有一个工厂:

import factory

class MyModelFactory(factory.DjangoModelFactory):
    param1 = <some value>
    param2 = <some value>
    param3 = <some value>

    # And here i need to "rewrite" property of the model
    # so that it would always return true
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我吗?我没有在工厂男孩的文档中找到关于这个的提及,我尝试的各种变体似乎不起作用.

小智 2

您尝试过使用模拟吗?

def test_is_smith(self):
    mymodel = MyModel()
    with mock.patch('MyModel.is_smith', new_callable=mock.PropertyMock) as mocked_model:
        mocked_model.return_value = True
        self.assertTrue(mymodel.is_smith)
Run Code Online (Sandbox Code Playgroud)