Django单元测试:模型已经注册错误

时间:2009-09-07 05:33:18

标签: django unit-testing

我在尝试django unittests库时遇到了几个问题。发生了一些奇怪的事情:

我定义了这样的测试:

from django.core import management
from django.test import TestCase
from django.test.client import Client
from django.core import mail
from django.test.utils import setup_test_environment
from django.contrib.auth.models import User
from django.db import connection
from goserver.models import ActiveList

class GoserverTestCase(TestCase):
    #fixtures = ['dat.json']

    def setUp(self):
        pass

    def test_active_list_works(self):
        c = Client()
        response = c.post('/')
        #print response.status_code
        self.assertEquals(True, True)

但是在执行代码之后它会返回以下错误:

----------------------------------------------------------------------  Unit Test Code Coverage Results
---------------------------------------------------------------------- Traceback (most recent call last):   File "manage.py", line 11, in <module>
    execute_manager(settings)   File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/__init__.py", line 340, in execute_manager
    utility.execute()   File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/__init__.py", line 295, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv) File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/base.py", line 192, in run_from_argv
    self.execute(*args, **options.__dict__)   File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/base.py", line 219, in execute
    output = self.handle(*args, **options)   File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/commands/test.py", line 33, in handle
    failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive)   File "/opt/local/lib/python2.5/site-packages/django_test_coverage-0.1-py2.5.egg/django-test-coverage/runner.py", line 58, in run_tests
    modules.extend(_package_modules(*pkg)) File "/opt/local/lib/python2.5/site-packages/django_test_coverage-0.1-py2.5.egg/django-test-coverage/runner.py", line 92, in _package_modules
    modules.append(__import__(impstr + '.' + name, {}, {}, ['']))   File "/Users/oleg/jin/goclub/trunk/jin/goserver/admin.py", line 11, in <module>
    admin.site.register(ActiveList, ActiveListAdmin)   File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/contrib/admin/sites.py", line 64, in register
    raise AlreadyRegistered('The model %s is already registered' % model.__name__) django.contrib.admin.sites.AlreadyRegistered: The model ActiveList is already registered silver:jin oleg$

管理员文件如下所示:

from goserver.models import ActiveList, Game
from django.contrib import admin

class ActiveListAdmin(admin.ModelAdmin):
    list_display = ('user', "is_Bot", "isActive")

admin.site.register(ActiveList, ActiveListAdmin)
admin.site.register(Game)

我这样运行: python manage.py test goserver

还注意到如果我删除行             c =客户()             response = c.post('/')

从测试用例定义

,然后没有出现错误

3 个答案:

答案 0 :(得分:4)

查看回溯,看起来您有一个名为django_test_coverage-0.1的应用,它正在导入您应用的admin.py

可能是从其他位置导入,例如yourproject.yourapp.admin而不是yourapp.admin。由于它在技术上被视为一个不同的模块,因此会重新导入它并再次进行admin.site.register调用。这会导致AlreadyRegistered错误。

我的建议是删除django_test_coverage app(或修复它)。

答案 1 :(得分:0)

我的问题,

  • 我不知道什么是TestCase的基类型/类 - 是Django Test one还是Unittest? 最好从Django使用
  • 你怎么跑步测试?使用Django内部测试命令,通过鼻子,通过unittest?通过Traceback I thing test命令,但我不太确定。
  • 您对ActiveAdminList和ActiveList的定义是什么?你有没有在Meta的课程管理员?

答案 2 :(得分:0)

我解决了这个问题,注意了proye

中的admin.autodiscover()行