代码之家  ›  专栏  ›  技术社区  ›  user1333

Django测试运行程序找不到测试

  •  51
  • user1333  · 技术社区  · 15 年前

    我对python和django都是新手,我正在通过创建一个饮食管理网站来学习,但是我完全被运行单元测试打败了。我发现的所有文档和博客都说,只要它可以从test s.py中发现,test s.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')   
    

    我也尝试过将django测试用例类划分为子类,但这也不起作用。我用的是django 1.1.1,python 2.6,我用的是雪豹。

    我肯定我遗漏了一些非常基本和明显的东西,但我就是搞不懂什么。有什么想法吗?

    编辑:评论后快速更新

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

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

    16 回复  |  直到 6 年前
        1
  •  129
  •   Greg Dubicki    7 年前

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

    我得到 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'
    

    测试文件必须从 测试 关键字 .

        2
  •  48
  •   Nisse Engström sting_roc    7 年前

    如果你用的是 yourapp/tests 单元测试的包/样式,确保 __init__.py 在那里(因为这就是为什么它是一个python模块!).

        3
  •  15
  •   codingrhythm    9 年前

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

    python project/manage.py test app_name
    

    但当我奔跑

    python project/manage.py test
    

    找到0个测试

    我需要在与manage.py相同的目录中运行它。

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

    python manage.py test
    
        4
  •  11
  •   user1333    15 年前

    解决了。

    结果是我做的 django-admin.py startproject pyDietTracker 但不是 python manage.py startapp myApp .在回去做这件事之后,它确实按照文档的方式工作了。看起来我有很多东西要学,关于阅读,以及在django网站和应用程序之间的区别。

    谢谢你的帮助,S.Lott和Emil Stenstr_¶M。我希望我能接受你的两个答案,因为它们都得到了很大的帮助。

    最重要的一课 测试仅在应用程序级别工作,而不是在站点级别工作

        5
  •  10
  •   Boris Verkhovskiy Brian Clapper    6 年前

    在我的情况下,我打字 def 而不是 class . 而不是

    class TestDisplayWeight(TestCase):
    

    我有

    def TestDisplayWeight(TestCase):
    
        6
  •  9
  •   Daniel Gasull    11 年前

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

        7
  •  6
  •   devsnd    7 年前

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

    tests/
        __init__.py
        somemodule.py
    

    在你 π介子 现在需要导入 somemodule 这样地:

    from .somemodule import *
    
        8
  •  3
  •   Nils Dmitriy Kuznetsov    13 年前

    当我在同一个django应用程序目录中有一个test.py文件和一个test/subdirectory时,就发生了这种情况。我想无论是在test.py中寻找测试模块还是在test/subdir中寻找测试包,我都会混淆python或测试运行程序。

        9
  •  3
  •   David Boshton    10 年前

    这是我刚得到的另一个:检查测试文件是否不可执行。我的virtualbox自动将它们作为可执行文件安装,因此测试发现完全错过了它们。我必须把它们加入 __init__.py 文件之前有人告诉我什么问题是作为一个解决办法,但现在他们被删除,不可执行和一切工作。

        10
  •  3
  •   Thijs    6 年前

    在我的例子中,应用程序文件夹本身缺少 __init__.py . 这会导致运行测试时的行为 python manage.py test project.app_name 但不能 python manage.py test .

    project/
      app_name/
        __init__.py   # this was missing
    
        11
  •  1
  •   Nilesh    12 年前

    如果您尝试在主应用程序中运行测试,例如“我的应用程序/我的应用程序”,请确保已选中以下项:

    1. 应用程序名称列在已安装的应用程序中 settings.py
    2. 确定你的 DATABASES['default'] 里面 设置Py 设置正确
    3. 这个应用程序有一个 models.py (即使您不使用,至少需要有一个空的)
        12
  •  1
  •   SGaist    6 年前

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

    测试不运行的最常见原因是您的设置不正确,并且您的模块不在已安装的应用程序中。

    我们使用 django.test.TestCase 而不是 unittest.TestCase . 它有 Client 捆绑在一起

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

        13
  •  0
  •   Aleksandr Aksarin    7 年前

    使用此语法

    python manage.py test
    

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

        14
  •  0
  •   Rick Graves    7 年前

    在同一个文件中,我用 同名 当然,这阻止了所有测试的运行。

        15
  •  0
  •   Qarj    6 年前

    我创建了一个名为 run 在我的测试课上,这是一个非常坏的主意。python可以看到我想运行测试,但却不能。这个问题略有不同,但结果是相同的-它使测试似乎找不到。

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

        16
  •  0
  •   Benyamin    6 年前

    在我的例子中,我错过了用 试验台 当用以下方法运行我的测试时:

    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'...
    

    似乎姜戈不认识我的测试!

    然后我改变 我的项目/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'...