技术开发 频道

django单元测试历险记

  奇怪的是,只有在WingIDE中启动才会出现,在命令行里执行就不会有这个错误。后来看了一下WingIDE的设置,原来可以Debug里的 Exception可以设置Never Report和Always Report,在Never Report里添加UnboundLocalError,同时在Always Report里去掉,这个异常就没有出现了。

  再次运行,开始看到一大段的输出,时不时还有一些异常:

  django.template.TemplateDoesNotExist: registration/password_change_form.html

  输出大致如下:

  Creating test database...

  Creating table auth_permission

  Creating table auth_group

  Creating table auth_user

  Creating table auth_message

  Creating table django_content_type

  Creating table django_session

  Creating table django_site

  Installing index for auth.Permission model

  Installing index for auth.Message model

  EE..E...EEEEEEE... ... ... ... ... ...

  ======================================================================

  ERROR: test_password_change_fails_with_invalid_old_password (django.contrib.auth.tests.views.ChangePasswordTest)

  ----------------------------------------------------------------------

  Traceback (most recent call last):

  File "D:\Python25\Lib\site-packages\django\contrib\auth\tests\views.py", line 156, in test_password_change_fails_with_invalid_old_password

  'new_password2': 'password1',

  。。。。。

  File "D:\Python25\Lib\site-packages\django\template\loader.py", line 74, in find_template_source

  raise TemplateDoesNotExist, name

  TemplateDoesNotExist: registration/password_change_form.html

  原来运行的是manage.py test,默认把INSTALLED_APP里的其他模块的测试案例也运行了起来。这些异常也是允许那些测试案例抛出的,而我定义的测试案例貌似没有运行。来回看了几遍文档,百思不得其解。最后,打算直接看django的源码,为何没有加载我的测试案例,而像django.contrib.auth里的测试案例却都能执行起来。于是我一步一步的跟进去调试。最后发现:

  首先会查找当前目录的models.py,如果这个模块Import失败的话不会再继续从tests模块里找。

  也就是说,我必须定义一个models.py文件,即使里面没有内容。于是,我添加了一个models.py文件问题就解决了!

0
相关文章