首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Django单元测试中声明一个模拟模型?

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

Stack Overflow用户
提问于 2017-10-04 02:59:34
回答 1查看 349关注 0票数 2

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

我已经扩展了Django的ModelForm类来创建一个ResourceForm,它的clean()方法中内置了一些使用Resources的功能,这些功能的细节并不重要。ResourceForm基本上是一个库类,在应用程序中没有定义ResourceForm类的模型,所以我不能只使用应用程序中的现有模型(例如,mock.Mock(spec=SomeModel)不是一个选项)。

我正在尝试对ResourceForm进行单元测试,但我找不到正确的方法来模拟Django Model,这是必需的,因为ResourceForm继承自ModelForm。这是我尝试过的几种方法之一(在本例中不使用mock,但它用于说明正在尝试的内容):

代码语言:javascript
复制
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)

但这引发了以下问题:

代码语言:javascript
复制
RuntimeError: Model class customer.tests.tests_lib_restless_ext.SampleModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

如果我在如何尝试测试这一点上大错特错,我愿意接受建议。

EN

回答 1

Stack Overflow用户

发布于 2017-10-15 12:19:40

最简单的办法就是使用Django自带的user model

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46551595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档