如果Django的中继线自己的单元测试失败怎么办?

时间:2009-10-28 14:22:16

标签: django

我在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()方法吗?

3 个答案:

答案 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。这就是为什么我认为(像丹尼尔)这是一个缺少模板的问题。