我在Django主干上工作,注意到主干中Django模块的单元测试总是出现故障。 Django主干是否应该通过所有自己的单元测试?
以下是一些示例错误:
====================================================================== ERROR: test_password_change_fails_with_invalid_old_password (django.contrib.auth.tests.views.ChangePasswordTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/michael/django/trunk/django/contrib/auth/tests/views.py", line 156, in test_password_change_fails_with_invalid_old_password 'new_password2': 'password1', File "/Users/michael/django/trunk/django/test/client.py", line 318, in post response = self.request(**r) File "/Users/michael/django/trunk/django/core/handlers/base.py", line 87, in get_response response = middleware_method(request, callback, callback_args, callback_kwargs) File "/Users/michael/Documents/workspace/drchrono/drchrono_middleware/drchrono.py", line 31, in process_view setattr(request, 'currentDoctor', request.user.get_profile().doctor) #Default is to have currentDoctor be default for logged in user. File "/Users/michael/django/trunk/django/contrib/auth/models.py", line 285, in get_profile self._profile_cache = model._default_manager.get(user__id__exact=self.id) File "/Users/michael/django/trunk/django/db/models/manager.py", line 119, in get return self.get_query_set().get(*args, **kwargs) File "/Users/michael/django/trunk/django/db/models/query.py", line 298, in get % self.model._meta.object_name) DoesNotExist: UserProfile matching query does not exist.
我刚刚意识到很多错误都提到了缺少的UserProfile,并且我在通过Web注册过程创建新用户时创建了一个自定义的UserProfile对象(但是在实例化新的User对象时没有创建在管理员或我将通过代码假设。)因此,这可能是我的应用程序的错误,因为没有为不是通过GUI创建的用户创建UserProfiles。如何为每个创建的User对象创建UserProfile?你是monkeypatch User类的new()方法吗?
答案 0 :(得分:3)
主干应该通过所有测试。如果您有一致的失败,也许您的环境在某种程度上是不寻常的。如果不同的测试在不同的时间失败,您可能只是观察典型的树干混乱。
django-developers list对此类内容非常敏感。如果你专业地询问(例如,不是“帅哥,你的代码sux!它甚至没有通过自己的测试!!”),它们会帮助你找出问题所在。
答案 1 :(得分:2)
几个星期前在开发人员名单中注意到(见this thread)开箱即用,Django没有通过所有测试。但是,这与缺少特定模板而不是数据库表有关。那有什么响铃吗?
答案 2 :(得分:0)
我正在使用django 1.2.3(稳定版本,而不是主干)。当我创建一个空应用程序并运行./manage.py test
时,我得到三个测试失败,其中一个是上面指出的测试。但是,在我的情况下,错误与缺少的模板有关:TemplateDoesNotExist: registration/password_change_form.html
。这就是为什么我认为(像丹尼尔)这是一个缺少模板的问题。