我正在尝试找出在admin.py中测试admin.ModelAdmin的最佳方法。具体来说,我正在覆盖我想要测试的save_model()函数。从我所做的研究来看,我找到的唯一解决方案是编写请求/响应测试,然后查询数据库。
admin.py
admin.ModelAdmin
save_model()
wlp8pajw1#
正如Udi's answer中所建议的,我们可以研究Django自己的ModelAdmin tests,以确定ModelAdmin测试的基本要素。
ModelAdmin
除了Django TestCase的东西,基本成分是:
TestCase
AdminSite
from django.contrib.admin.sites import AdminSite
1.您的模型类和对应的ModelAdmin(子)类:
from my_app.models import MyModel from my_app.admin import MyModelAdmin
1.根据您的需要,还可以选择(模拟)请求和/或表单。
创建(自定义)ModelAdmin的示例需要前两个要素:
my_model_admin = MyModelAdmin(model=MyModel, admin_site=AdminSite())
基于ModelAdmin源代码,默认的save_model实现只需要模型的一个示例,因此可以调用它,例如,如下所示:
save_model
my_model_admin.save_model(obj=MyModel(), request=None, form=None, change=None) # some test assertions here
这完全取决于您的save_model做什么,以及您想要测试什么。假设您的save_model检查用户权限,那么您需要提供一个request(即第三个要素),除了模型示例之外,还需要提供一个有效的用户:
request
from unittest.mock import Mock ... my_user = User.objects.create(...) my_model_admin.save_model( obj=MyModel(), request=Mock(user=my_user), form=None, change=None ) # some test assertions here
这里我们使用unittest.mock.Mock来创建一个模拟请求。基于Django测试源代码,一个最小的request由一个Python object和一个user属性组成。user属性可以引用一个模拟用户,或者你的AUTH_USER_MODEL的一个actual instance,这取决于你的需要。一个替代方法是使用django. test. RequestFactory。这种基本方法也适用于其他ModelAdmin方法。
unittest.mock.Mock
object
user
AUTH_USER_MODEL
mw3dktmi2#
查看Django的ModelAdminTests作为例子。
ModelAdminTests
vxf3dgd43#
您可以为modeladmin指定自定义的modelform,然后简单地测试这个modelform ;)https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form
表格
class SomeModelForm(forms.ModelForm): class Meta: model = SomeModel
管理员
class SomeModelAdmin(admin.ModelAdmin): form = SomeModelForm admin.site.register(SomeModel, SomeModelAdmin)
测试
class TestSomeModel(TestCase): def test_form(self): form = SomeModelForm(**kwargs) self.assertTrue(form.is_valid()) # ...
3条答案
按热度按时间wlp8pajw1#
正如Udi's answer中所建议的,我们可以研究Django自己的ModelAdmin tests,以确定
ModelAdmin
测试的基本要素。基本成分
除了Django
TestCase
的东西,基本成分是:AdminSite
的示例:1.您的模型类和对应的
ModelAdmin
(子)类:1.根据您的需要,还可以选择(模拟)请求和/或表单。
配方
创建(自定义)
ModelAdmin
的示例需要前两个要素:基于ModelAdmin源代码,默认的
save_model
实现只需要模型的一个示例,因此可以调用它,例如,如下所示:这完全取决于您的
save_model
做什么,以及您想要测试什么。假设您的save_model
检查用户权限,那么您需要提供一个request
(即第三个要素),除了模型示例之外,还需要提供一个有效的用户:这里我们使用
unittest.mock.Mock
来创建一个模拟请求。基于Django测试源代码,一个最小的request
由一个Pythonobject
和一个user
属性组成。user
属性可以引用一个模拟用户,或者你的AUTH_USER_MODEL
的一个actual instance,这取决于你的需要。一个替代方法是使用django. test. RequestFactory。这种基本方法也适用于其他
ModelAdmin
方法。mw3dktmi2#
查看Django的
ModelAdminTests
作为例子。vxf3dgd43#
您可以为modeladmin指定自定义的modelform,然后简单地测试这个modelform ;)
https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form
表格
管理员
测试