bre*_*bre 54 python django django-unittest
我正在玩django 1.6教程,但我无法运行测试.我的项目(名称mydjango)和应用程序结构(名称是民意调查)如下所示在virtualenv中.(.nja文件只是由我正在使用的ninja-ide创建的)
.
??? __init__.py
??? manage.py
??? mydjango
? ??? __init__.py
? ??? __init__.pyc
? ??? mydjango.nja
? ??? settings.py
? ??? settings.pyc
? ??? templates
? ? ??? admin
? ? ??? base_site.html
? ??? urls.py
? ??? urls.pyc
? ??? wsgi.py
? ??? wsgi.pyc
??? polls
? ??? admin.py
? ??? admin.pyc
? ??? __init__.py
? ??? __init__.pyc
? ??? models.py
? ??? models.pyc
? ??? templates
? ? ??? __init__.py
? ? ??? polls
? ? ??? detail.html
? ? ??? index.html
? ? ??? __init__.py
? ? ??? results.html
? ??? tests.py
? ??? tests.pyc
? ??? urls.py
? ??? urls.pyc
? ??? views.py
? ??? views.pyc
??? polls.nja
Run Code Online (Sandbox Code Playgroud)
我按照教程了解django是如何工作的,但我陷入了测试部分.正如教程建议我在app文件夹中创建了一个名为tests.py的文件,非常简单的文件是:
# -*- coding: utf-8 -*-
from django.test import TestCase
import datetime
from django.utils import timezone
from polls.models import Question
# Create your tests here.l
class QuestionMethodTests(TestCase):
def test_was_published_recently_with_future_poll(self):
"""
was_published_recently dovrebbe ritornare falso se si mette una data nel futuro
"""
future_question = Question(pub_date=timezone.now() + datetime.timedelta(hours=50))
self.assertEqual(future_question.was_published_recently(), False)
Run Code Online (Sandbox Code Playgroud)
然后我将unittest2安装到virtualenv中
$pip install unittest2
Run Code Online (Sandbox Code Playgroud)
并运行
$python manage.py test polls
Creating test database for alias 'default'...
E
======================================================================
ERROR: mydjango.polls.tests (unittest2.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: mydjango.polls.tests
Traceback (most recent call last):
File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests
module = self._get_module_from_name(name)
File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name
__import__(name)
ImportError: No module named polls.tests
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
没有办法让测试工作,如果不传递应用程序名称,它返回相同的错误:
$ python manage.py test
Creating test database for alias 'default'...
E
======================================================================
ERROR: mydjango.polls.tests (unittest2.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: mydjango.polls.tests
Traceback (most recent call last):
File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests
module = self._get_module_from_name(name)
File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name
__import__(name)
ImportError: No module named polls.tests
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
我的INSTALLED_APPS是:
INSTALLED_APPS = (
'south',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
pch*_*uet 174
我的Django项目遇到了完全相同的问题:
$ python manage test polls.tests
Run Code Online (Sandbox Code Playgroud)
工作正常,而以下失败导致导入错误:
$ python manage test polls
$ python manage test
(...)
ImportError: Failed to import test module: mydjango.polls.tests
Traceback (most recent call last):
(...)
ImportError: No module named polls.tests
Run Code Online (Sandbox Code Playgroud)
仔细检查错误消息:Django的测试运行器尝试从mydjango.polls.tests导入测试,其中mydjango是根目录的名称(项目的容器).
我通过删除mydjango目录中的__init__.py文件(与manage.py文件处于同一级别)来解决此问题.这个目录不应该是一个python模块,如果是这样的话,它似乎搞乱了Django的测试运行器.
所以只需删除_ init _.py文件就可以解决我们的问题:
$ rm mydjango/__init__.py
Run Code Online (Sandbox Code Playgroud)
小智 12
对于其他具有相同问题的人来说,另一个原因是如果您对根文件夹和项目文件夹具有相同的名称.
例如:
mydjango
??? __init__.py
??? manage.py
??? mydjango
? ??? __init__.py
? ??? settings.py
? ??? urls.py
? ??? wsgi.py
??? polls
? ??? admin.py
? ??? __init__.py
? ??? models.py
| ??? tests.py
? ??? templates
Run Code Online (Sandbox Code Playgroud)
赛跑
./manage.py test
抛出错误没有名为polls.tests的模块
修复它只需将根文件夹重命名为其他类似:
mydjango_project
??? __init__.py
??? manage.py
??? mydjango
? ??? __init__.py
? ??? settings.py
? ??? urls.py
? ??? wsgi.py
??? polls
? ??? admin.py
? ??? __init__.py
? ??? models.py
| ??? tests.py
? ??? templates
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27169 次 |
| 最近记录: |