【问题标题】:Basic Tests in DjangoDjango 中的基本测试
【发布时间】:2014-03-10 03:32:17
【问题描述】:

我正在我的 django 项目中进行测试,但是当我在控制台中执行测试时,我得到以下输出

(course)bgarcial@el-pug:~/python_Devel/course/proyecto_clase2$ python manage.py test app
Creating test database for alias 'default'...
E
======================================================================
ERROR: proyecto_clase2.app.tests (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: proyecto_clase2.app.tests
Traceback (most recent call last):
  File "/usr/lib/python2.7/unittest/loader.py", line 252, in _find_tests
     module = self._get_module_from_name(name)
  File "/usr/lib/python2.7/unittest/loader.py", line 230, in _get_module_from_name
      __import__(name)
 ImportError: No module named app.tests


 ----------------------------------------------------------------------
 Ran 1 test in 0.000s

 FAILED (errors=1)
 Destroying test database for alias 'default'...
(course)bgarcial@el-pug:~/python_Devel/course/proyecto_clase2$

我的文件tests.py如下:

from django.test import TestCase

from .models import Categoria,Enlace
from django.contrib.auth.models import User

# Create your tests here.

    class SimpleTest(TestCase):
        def test_es_popular(self): 
            categoria = Categoria.objects.create(titulo='Categoria de prueba') 
            usuario = User.objects.create_user(username='julian', password='barbas')
            Enlace.objects.create(titulo='Prueba',enlace='http://ieee-wie.co', votos=0,
                              categoria=categoria, usuario=usuario)

与发生故障的模块有关的情况是什么?

【问题讨论】:

    标签: python django unit-testing testing


    【解决方案1】:

    我遇到了类似的问题,并且能够使用this question 的答案解决它。测试运行器可能正在尝试从项目目录而不是它们所属的模块导入您的测试。

    尝试使用以下命令显式运行单个测试:

    $ python manage.py test app.tests.SimpleTest
    

    然后尝试从您的项目目录中删除__init__.py 文件(如果您的项目目录中有manage.py 文件所在的目录,但不是 存储设置的目录)。

    【讨论】:

    • 如你所说,该测试对我有用。我查看了您推荐给我的链接,但是..我仍然不明白..为什么我应该添加 name_of_my_app.tests.TestClass ?
    • 当你明确地运行一个测试时,你会告诉测试运行者在哪里可以找到测试。当您只是执行$ python manage.py test 时,测试运行程序会尝试为您找到项目中的所有测试。但是,如果您的项目目录与已安装的应用程序同名,则如果您的项目目录中有__init__.py,它将无法找到测试。这有助于澄清吗?
    • +1 我刚刚意识到,简单的__init__.pymanage.py 会让你陷入这个愚蠢的错误。
    【解决方案2】:

    根据当前(开发,1.7)documentation

    在 Django 1.6 中更改:

    以前,Django 的默认测试运行器只在 tests.pymodels.py 中列出的 Python 包中的文件 INSTALLED_APPS.

    所以,看起来您使用的是 django app 包下没有 tests.py,因此无法找到您的测试。

    现在你有几种方法可以解决这个问题:

    • test.py 重命名为tests.py - django 将在tests.py 中找到您的测试
    • 升级到 django 1.6 - django 将在 test.py 中找到您的测试
    • 切换到第三方测试运行器,例如nosedjango_nose 包肯定会有所帮助)。 Django(在鼻子测试发现的帮助下)将在test.py 中找到您的测试

    希望对您有所帮助。

    【讨论】:

    • Alecxe,我的文件名为tests.py,之前说的是test.py,我错了。真的是tests.py,我的django版本是1.6.2
    • @BernardoGarcia hm,app 是否列在 INSTALLED_APPS 中?
    • 是的,我的应用列在 settings.py 文件的 INSTALLED_APPS 指令中
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多