ins*_*tor 32 django unit-testing django-admin
我试图找出测试的最佳方式admin.ModelAdmin在admin.py.具体来说,我重写了save_model()我想测试的功能.根据我所做的研究,我发现的唯一解决方案是编写请求/响应测试,然后查询数据库.
djv*_*jvg 13
正如Udi的答案所建议的,我们可以研究Django自己的ModelAdmin测试,以确定测试的基本要素ModelAdmin。总结如下:
除了Django外TestCase,基本要素还包括:
的实例AdminSite:
from django.contrib.admin.sites import AdminSite
您的模型类和相应的ModelAdmin(子)类:
from my_app.models import MyModel
from my_app.admin import MyModelAdmin
(可选)根据您的需要,提供(模拟)请求和/或表格。
创建您的(自定义)实例需要前两个成分ModelAdmin:
my_model_admin = MyModelAdmin(model=MyModel, admin_site=AdminSite())
基于ModelAdmin源,默认save_model实现仅需要模型的实例,因此可以按如下方式调用它:
my_model_admin.save_model(obj=MyModel(), request=None, form=None, change=None)
# some test assertions here
这完全取决于您的save_model工作以及要测试的内容。假设您save_model检查用户权限,那么除了模型实例之外,您还需要通过有效用户传递请求(即第三种成分):
super_user = User.objects.create_superuser(username='super', email='super@email.org',
                                           password='pass')
my_model_admin.save_model(obj=MyModel(), request=MockRequest(user=super_user),
                          form=None, change=None)
# some test assertions here
MockRequest下面定义了一个示例。基于Django测试源,最少的代码request由object具有user属性的Python组成。根据您的需要,该user属性可以引用模拟用户或您的实际实例AUTH_USER_MODEL。
class MockRequest(object):
    def __init__(self, user=None):
        self.user = user
此基本方法也适用于其他ModelAdmin方法。
您可以为 modeladmin 指定自定义模型表单,然后简单地测试此模型表单;)
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())
        # ...
| 归档时间: | 
 | 
| 查看次数: | 16790 次 | 
| 最近记录: |