Django测试运动员没有找到测试

时间:2010-01-10 14:57:35

标签: python django unit-testing

我是Python和Django的新手,我正在通过创建一个饮食管理网站来学习,但我已经完全失败了让我的单元测试运行。我发现的所有文档和博客都说,只要它可以从tests.py中找到,tests.py与models.py在同一个文件夹中,并且你的测试类是子类TestCase,它应该全部自动获取。这对我不起作用,当我运行manage.py test <myapp>时,它没有找到任何测试。

我在他们自己的软件包中开始我的所有测试,但已将其简化为仅在test.py文件中的所有测试。当前的tests.py看起来像:

import unittest
from pyDietTracker.models import Weight
from pyDietTracker.weight.DisplayDataAdapters import DisplayWeight

class TestDisplayWeight(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testGetWeightInStone_KG_Correctly_Converted(self):
        weight = Weight()
        weight.weight = 99.8

        testAdapter = DisplayWeight(weight)
        self.assertEquals(testAdapter.GetWeightInStone(), '15 st 10 lb')   

我已经通过继承Django TestCase类来尝试它,但这也不起作用。我正在使用Django 1.1.1,Python 2.6并且我正在运行Snow Leopard。

我确信我遗漏了一些非常基本和明显的东西,但我无法解决问题。有什么想法吗?

编辑:评论后只需快速更新

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'pyDietTracker',
 )

要运行测试,我正在运行manage.py test pyDietTracker

20 个答案:

答案 0 :(得分:135)

我有同样的问题,但我的问题不同。

我得到了Ran 0 tests,作为OP。

但事实证明,测试类中的测试方法必须以关键字test开始才能运行

示例:

from django.test import TestCase


class FooTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def this_wont_run(self):
        print 'Fail'

    def test_this_will(self):
        print 'Win'

此外,测试的文件必须以test关键字开头。

答案 1 :(得分:53)

如果您使用yourapp/tests包/样式进行单元测试,请确保其中有__init__.py(因为这就是使其成为Python模块的原因!)。

答案 2 :(得分:16)

我可以针对特定应用程序运行测试,例如

python project/manage.py test app_name

但是当我跑步时

python project/manage.py test

发现了0个测试

弄清楚我需要在manage.py

所在的目录中运行它

所以解决方案是,cd到项目目录并运行

python manage.py test

答案 3 :(得分:11)

完成了工作。

事实证明我已完成django-admin.py startproject pyDietTracker但未python manage.py startapp myApp。返回并执行此操作后,它确实按照记录的方式工作。看起来我有很多东西需要学习阅读以及Django中网站和应用程序之间的区别。

感谢您的帮助S.Lott和EmilStenström。我希望我能接受你的答案,因为他们都得到了很多帮助。

最重要的课程测试仅适用于应用级别而非网站级别

答案 4 :(得分:10)

如果您在tests.py中出现语法错误,也会发生这种情况。

答案 5 :(得分:9)

就我而言,我输入 <resources> <resource> <directory>${project.sources}</directory> <filtering>true</filtering> <excludes> <exclude>**/*.woff</exclude> <exclude>**/*.ttf</exclude> </excludes> </resource> <resource> <directory>${project.sources}</directory> <filtering>false</filtering> <includes> <include>**/*.woff</include> <include>**/*.ttf</include> </includes> </resource> </resources> 而不是def。而不是

class

我有

class TestDisplayWeight(TestCase):

答案 6 :(得分:6)

当您使用tests模块而不是tests.py时,也可能会发生这种情况。在这种情况下,您需要将所有测试类导入到测试模块的__init__.py中,例如

tests/
    __init__.py
    somemodule.py

在您的__init__.py中,您现在需要像这样导入somemodule

from .somemodule import *

答案 7 :(得分:4)

就我而言,应用文件夹本身缺少__init__.py。这导致测试将与python manage.py test project.app_name一起运行,而不与python manage.py test一起运行。

project/
  app_name/
    __init__.py   # this was missing

答案 8 :(得分:3)

这是我刚刚拥有的另一个:检查您的测试文件是不可执行的。我的虚拟机将它们自动挂载为可执行文件,因此测试发现完全错过了它们。我不得不将它们添加到相关的__init__.py文件中,然后才有人告诉我这个问题是什么问题,但是现在它们被删除了,不可执行的和所有的_just_works。

答案 9 :(得分:3)

当我在同一个Django应用程序目录中有一个test.py文件和一个test /子目录时,我发生了这种情况。我想我在混淆python或测试运行器是否正在寻找测试模块(在test.py中)或测试包(在test / subdir中)。

答案 10 :(得分:1)

如果您尝试在主应用中运行测试,例如my_app / my_app /,请确保检查以下内容:

  1. 应用程序名称列在settings.py
  2. 内的INSTALLED_APPS中
  3. 确保DATABASES['default']内的settings.py设置正确
  4. 该应用有一个models.py(即使你没有使用它,至少需要一个空的)

答案 11 :(得分:1)

请参阅https://docs.djangoproject.com/en/1.11/topics/testing/overview/

测试未运行的最常见原因是您的设置不正确,并且您的模块不在INSTALLED_APPS中。

我们使用django.test.TestCase代替unittest.TestCase。它捆绑了Client

https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.TestCase

答案 12 :(得分:1)

使用此语法

python manage.py test

而不是./manage.py test为我解决了这个问题。

答案 13 :(得分:1)

就我而言,我错过了以 test _ 开头的函数名称 并使用:

运行我的测试时
python manage.py test myapp

结果为:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database for alias 'default'...

似乎Django无法识别我的测试!

然后我像这样更改 myproject / myapp / test.py 文件:

from django.test import TestCase
# Create your tests here.
class apitest(TestCase):

    def test_email(self):
        pass
    def test_secend(self):
        pass

该结果之后是:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 2.048s

OK
Destroying test database for alias 'default'...

答案 14 :(得分:0)

在同一个文件中,我有两个带有 SAME NAME 的测试类,当然这会阻止所有测试运行。

答案 15 :(得分:0)

我在我的测试类中创建了一个名为run的方法,结果证明这是一个非常糟糕的主意。 Python可以看到我想运行测试,但无法进行。这个问题略有不同,但结果是一样的 - 它似乎无法找到测试。

请注意,显示以下消息: You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>

答案 16 :(得分:0)

运行--help并查找详细信息。摇动到最大

我运行了manage.py test --verbose,并在顶部找到了该调试输出:

>nosetests --with-spec --spec-color --verbose --verbosity=2

哦,看!我已经安装并忘记了nosetests。它说--verbosity=2。我发现最大为3,然后运行3,我发现了很多:

nose.selector: INFO: /media/sf_C_DRIVE/Users/me/git/django/app/tests/test_processors.py is executable; skipped

这给了我正确的提示。对于具有x位设置的文件,确实存在问题。但是,由于它已经运行了一些测试,因此我被甩开了轨道-尽管它明确表示将跳过它们。无法更改位,因为我在VM中运行测试,共享Windows NTFS磁盘。因此,添加--exe可以解决此问题。

答案 17 :(得分:0)

有同样的问题,这是因为我的文件名的名称中包含-字符。 我的文件名是route-tests.py,并将其更改为route_tests.py

答案 18 :(得分:0)

如果在升级到Django 3后遇到此错误,则可能是因为-k参数的含义从:

-k, --keepdb          Preserves the test DB between runs.

-k TEST_NAME_PATTERNS   Only run test methods and classes that match the pattern or substring. Can be used multiple times. Same as unittest -k option.

因此,只需将-k替换为--keepdb,即可使其再次正常工作。

答案 19 :(得分:0)

Django引擎搜索带有test_前缀(在tests文件夹内)的文件和文件夹。就我而言,这是简单的解决方案。

因此,请确保签出文件/文件夹名称以其开头。