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

60 python django unit-testing

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

我从他们自己的软件包开始我的所有测试,但已将其简化为仅在我的tests.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')   
Run Code Online (Sandbox Code Playgroud)

我已经通过继承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',
 )
Run Code Online (Sandbox Code Playgroud)

为了让测试运行,我正在运行 manage.py test pyDietTracker

Edu*_*rdo 146

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

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'
Run Code Online (Sandbox Code Playgroud)

另外,与你的测试文件必须先从test关键字.

  • 如果它仍然不起作用,检查文件名是否与此模式匹配:`test*.py`这是django选择测试套件文件的方式.[django doc](https://docs.djangoproject.com/en/1.7/topics/testing/overview/#running-tests) (12认同)

Dav*_*Lam 61

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

  • 是的!如果您使用所需应用程序的自定义文件夹来运行测试(例如:“my_apps/app_name/”),那么您应该在“my_apps/”中创建“__init__.py”文件。 (4认同)

cod*_*thm 22

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

python project/manage.py test app_name
Run Code Online (Sandbox Code Playgroud)

但是当我跑

python project/manage.py test
Run Code Online (Sandbox Code Playgroud)

发现了0个测试

弄清楚我需要在manage.py所在的目录中运行它

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

python manage.py test
Run Code Online (Sandbox Code Playgroud)

  • 这对我有帮助,谢谢。测试运行程序似乎发现了当前工作目录,该目录本身必须是一个 Python 包(https://docs.djangoproject.com/en/dev/topics/testing/overview/#running-tests)。或者,您可以调用像这样的测试`python project/manage.py test project/` (2认同)

小智 11

解决了这个问题.

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

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

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


Dan*_*ull 11

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


Fli*_*imm 11

在我的情况下,我输入def而不是class.代替

class TestDisplayWeight(TestCase): # correct!
Run Code Online (Sandbox Code Playgroud)

我有

def TestDisplayWeight(TestCase): # wrong!
Run Code Online (Sandbox Code Playgroud)


dev*_*snd 9

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

tests/
    __init__.py
    somemodule.py
Run Code Online (Sandbox Code Playgroud)

在你的__init__.py,你现在需要导入somemodule这样的:

from .somemodule import *
Run Code Online (Sandbox Code Playgroud)

  • 这可能有效,但我认为这不是正确的解决方法,因为我有另一个不需要此导入来运行测试的 python 项目。 (2认同)

Abd*_*hid 9

我知道我现在迟到了,但我也遇到了麻烦

Found 0 test(s).
System check identified no issues (1 silenced).

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

OK
Run Code Online (Sandbox Code Playgroud)

我已按照所有步骤进行操作,但仍然面临同样的问题。我的修复是我错过了__init__.py测试目录中的文件。添加文件并重新运行命令解决了我的问题。

稍微强调一下:

确保您有__init__.py文件

  • 这解决了我的问题 (y) (2认同)

Thi*_*ijs 7

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

project/
  app_name/
    __init__.py   # this was missing
Run Code Online (Sandbox Code Playgroud)


Dav*_*ton 5

这是我刚刚遇到的另一个问题:检查您的测试文件是否不可执行。我的虚拟机将它们自动挂载为可执行文件,因此测试发现完全错过了它们。__init__.py在有人告诉我问题是什么作为解决方法之前,我不得不将它们添加到相关文件中,但现在它们已被删除,并且不可执行且一切正常。


小智 5

就我而言,我想念以test_开始我的函数名称, 并在运行我的测试时使用:

python manage.py test myapp
Run Code Online (Sandbox Code Playgroud)

结果是:

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'...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

之后的结果是:

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'...
Run Code Online (Sandbox Code Playgroud)