有没有办法在Django单元测试中声明一个模拟模型?

时间:2017-10-03 18:59:34

标签: python django unit-testing

标题说明了一切。我将通过展示我正在尝试做的事来说明问题。

我已经扩展了Django的ModelForm类来创建一个ResourceForm,它在clean()方法中内置了一些用于处理Resources的功能,其中的细节并不重要。 ResourceForm基本上是一个库类,应用程序中没有定义ResourceForm类的模型,因此我不能只使用应用程序中的现有模型(例如{{1} }}不是一个选项。)

我正在尝试单元测试mock.Mock(spec=SomeModel),但我无法找出模拟Django ResourceForm的正确方法,这是Model继承自ResourceForm后所必需的}。这是我尝试过的几项努力之一(在这种情况下不使用ModelForm,但它用于说明正在尝试的内容):

mock

但是提出了:

class ResourceFormTestCase(TestCase):

    class SampleModel(Model):
        sample_field = CharField()

    class SampleResourceForm(ResourceForm):
        class Meta():
            model = SampleModel
            fields = ['sample_field']

    def test_unsupported_field_raise_validation_error(self):
        print('Test validation error is raised when unsupported field is provided')
        form_data = {'sample_field': 'FooBar', 'unsupported_field': 'Baz'}
        form = self.SampleResourceForm(data=form_data)

如果我试图对此进行测试,我会接受建议。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用Django附带的user model

如果这是不可接受的,我已经成功修补了Django管道,使其关闭并在没有数据库连接的情况下运行单元测试。查看django_mock_queries project,看看是否有任何帮助。