Django Admin.py操作的单元测试用例

时间:2015-05-30 22:34:44

标签: python django unit-testing

这是我的第一个Django项目。在我的admin.py文件中,我定义了字段和search_fields。我想知道如何编写测试用例来验证这些。

代码段:

class CategoryAdmin(admin.ModelAdmin):
    fields = ['name']
    search_fields = ['name']

是否需要为这些事情提供单元测试用例?

1 个答案:

答案 0 :(得分:0)

我常常在search_fields,list_display等中搞乱名字。我把以下测试用例放在一起作为我的第一次验证尝试。当我在搜索Stack Overflow以获得更好或更完整的解决方案时,我遇到了你的问题,并认为我可能会在此处删除我的代码,因为你的问题没有任何答案。

model_classnames = ['MyModelX', 'MyModelY', 'MyModelZ']

admin_fieldname_lists = ['list_display', 'search_fields']

class TestAdminConfig(TestCase):

    def test_admin_fieldname_lists(self):
        for model_classname in model_classnames:
            model_class = locate("tasks.models.%s" % model_classname)
            admin_class = locate("tasks.admin.%sAdmin" % model_classname)
            #print("classes: %s, %s" % (model_class.__name__, admin_class.__name__))
            for list_name in admin_fieldname_lists:
                #print("    list: %s" % list_name)
                for fieldname in getattr(admin_class, list_name):
                    fieldname = fieldname.replace("^", "")
                    #print("       field: %s" % fieldname)
                    if fieldname in dir(model_class): continue
                    if fieldname in dir(admin_class): continue
                    model_class.objects.filter(**{fieldname:None})

简而言之,这会循环遍历所有模型/字段名称组合,并决定任何给定的“fieldname”如果可以在Model类,相应的ModelAdmin类中找到,或者是更复杂的字符串,如“foo__auth_user__first_name” “这可以作为一个过滤器。该代码删除有时以search_fields为前缀的“^”字符。

既然你的问题已经过时了,你最终找到了自己的解决方案吗?如果是这样,它是什么?