【问题标题】:Django can't discover tests correctlyDjango 无法正确发现测试
【发布时间】:2014-11-01 11:17:25
【问题描述】:

我正在尝试对我的项目实施一些测试,但我目前遇到了问题。

项目结构:

manage.py
-- src
---- apps
------- app1
------- app2
---- project
-------- settings.py
-------- urls.py

如果我将__init__.py 放入应用程序文件夹,我会得到

RuntimeError: Conflicting 'entry_tags' models in application 'entries': <class '
    entries.models.Entry_tags'> and <class 'src.apps.entries.models.Entry_tags'>.

如果我删除 __init__.py 并将我的应用程序目录添加到 sys.path 则不会发现我的测试。

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))

sys.path.append(os.path.join(PROJECT_DIR, os.path.pardir, os.path.pardir, 'apps'))



(env) D:\projekty\ogloszenia>python manage.py test

Creating test database for alias 'default'...
.E
======================================================================
ERROR: src.apps.entries.tests (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: src.apps.entries.tests
Traceback (most recent call last):
  File "C:\Python27\Lib\unittest\loader.py", line 254, in _find_tests
    module = self._get_module_from_name(name)
  File "C:\Python27\Lib\unittest\loader.py", line 232, in _get_module_from_name
    __import__(name)
  File "D:\projekty\ogloszenia\src\apps\entries\tests.py", line 10, in <module>
    from .models import Entry
  File "D:\projekty\ogloszenia\src\apps\entries\models.py", line 32, in <module>

    class Entry(EntryMetaDataMixin):
  File "D:\projekty\ogloszenia\env\lib\site-packages\django\db\models\base.py",
line 170, in __new__
    new_class.add_to_class(obj_name, obj)
  File "D:\projekty\ogloszenia\env\lib\site-packages\django\db\models\base.py",
line 299, in add_to_class
    value.contribute_to_class(cls, name)
  File "D:\projekty\ogloszenia\env\lib\site-packages\django\db\models\fields\rel
ated.py", line 2254, in contribute_to_class
    self.rel.through = create_many_to_many_intermediary_model(self, cls)
  File "D:\projekty\ogloszenia\env\lib\site-packages\django\db\models\fields\rel
ated.py", line 1860, in create_many_to_many_intermediary_model
    to: models.ForeignKey(to_model, related_name='%s+' % name, db_tablespace=fie
ld.db_tablespace, db_constraint=field.rel.db_constraint)
  File "D:\projekty\ogloszenia\env\lib\site-packages\django\db\models\base.py",
line 285, in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
  File "D:\projekty\ogloszenia\env\lib\site-packages\django\apps\registry.py", l
ine 213, in register_model
    (model_name, app_label, app_models[model_name], model))
RuntimeError: Conflicting 'entry_tags' models in application 'entries': <class '
entries.models.Entry_tags'> and <class 'src.apps.entries.models.Entry_tags'>.

系统路径:

D:\projekty\ogloszenia
D:\projekty\ogloszenia\env\lib\site-packages\psycopg2-2.5.4-py2.7-win32.egg
D:\projekty\ogloszenia\env\lib\site-packages\test_pkg-0.0-py2.7.egg
C:\Program Files (x86)\Csound6\bin
C:\Windows\SYSTEM32\python27.zip
D:\projekty\ogloszenia\env\DLLs
D:\projekty\ogloszenia\env\lib
D:\projekty\ogloszenia\env\lib\plat-win
D:\projekty\ogloszenia\env\lib\lib-tk
D:\projekty\ogloszenia\env\Scripts
C:\Python27\Lib
C:\Python27\DLLs
C:\Python27\Lib\lib-tk
D:\projekty\ogloszenia\env
D:\projekty\ogloszenia\env\lib\site-packages
D:\projekty\ogloszenia\src\project\project_settings\..\..\apps

可能出了什么问题:)?

【问题讨论】:

  • 您在src 下有__init__.py 文件吗?如果是这样,请尝试将其删除。
  • 我已将其删除,但没有帮助。删除 /src/ 和 /apps/ 中的 init.py 确实停止了 RuntimeError,但 django 测试运行程序看不到 /apps/ 文件夹中的应用程序测试。当 /apps/ 中的应用程序移出应用程序到主文件夹时,就会发现测试。但我的目标是将它们保留在 /apps/
  • 您运行的是哪个版本的 Django?见pypi.python.org/pypi/django-discover-runner
  • 我使用的是 django 1.7。 unittest.loader.py 有以下代码可以解释很多: elif os.path.isdir(full_path): if not os.path.isfile(os.path.join(full_path, 'init.py')): 继续

标签: python django unit-testing


【解决方案1】:

它可能无法完全修复 django 'RuntimeError: Conflicting...' 但不是使用:

python manage.py test 

我安装了 py.test 并使用以下配置创建了 pytest.ini:

[pytest]
DJANGO_SETTINGS_MODULE = project.settings
python_paths = apps apps/entries/
python_files=test*.py

我现在没有收到任何错误,而且我的测试如我所愿地被发现。

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 2013-08-24
    • 2011-04-18
    • 2018-02-14
    • 2014-12-15
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多