标题说明了一切。我将通过展示我正在尝试做的事情来说明这个问题。
我已经扩展了Django的ModelForm类来创建一个ResourceForm,它的clean()方法中内置了一些使用Resources的功能,这些功能的细节并不重要。ResourceForm基本上是一个库类,在应用程序中没有定义ResourceForm类的模型,所以我不能只使用应用程序中的现有模型(例如,mock.Mock(spec=SomeModel)不是一个选项)。
我正在尝试对ResourceForm进行单元测试,但我找不到正确的方法来模拟Django 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)但这引发了以下问题:
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.如果我在如何尝试测试这一点上大错特错,我愿意接受建议。
发布于 2017-10-15 12:19:40
最简单的办法就是使用Django自带的user model。
如果这是不能接受的,我已经成功地修补了足够多的Django管道,使其能够在没有数据库连接的情况下关闭并运行单元测试。在django_mock_queries project中查看其中是否有任何有用的信息。
https://stackoverflow.com/questions/46551595
复制相似问题