为什么我的App测试不被Django测试识别?

时间:2013-08-31 17:32:10

标签: python django django-testing python-unittest django-tests

背景:

我有以下django项目设置:

>TopLevel:
>  - App1:
>      * models.py
>      * forms.py
>      * views.py
>      * __init__.py
>      * Tests/
>        * __init__.py
>        * test_simple.py

以下是test_simple.py中的代码:

from django.test import TestCase


class SimpleTest(TestCase):
    def test_basic_addition(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        self.assertEqual(1 + 1, 2)

现在,当我跑:

> python manage.py test app1

我得到以下输出:

>Creating test database for alias 'default'...
>
>----------------------------------------------------------------------
>Ran 0 tests in 0.000s
>
>OK
>Destroying test database for alias 'default'...

但是,如果我改为使用以下项目结构:

>TopLevel:
>  - App1:
>      * models.py
>      * forms.py
>      * views.py
>      * __init__.py
>      * tests.py

其中tests.py具有以下代码:

from django.test import TestCase


class SimpleTest(TestCase):
    def test_basic_addition(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        self.assertEqual(1 + 1, 2)

现在,当我跑:

> python manage.py test app1

我明白了:

>Creating test database for alias 'default'...
>.
>----------------------------------------------------------------------
>Ran 1 test in 0.002s
>
>OK
>Destroying test database for alias 'default'...

问题:

为什么Django无法识别我的测试目录&&为什么测试中列出的任何测试都不会被Django的unittest结构选中来运行?

3 个答案:

答案 0 :(得分:2)

睡眠良好且甚至不考虑测试发现的一个选择是使用nose。它有很多功能,其中之一是automatic tests discovery

有一个名为django_nose的软件包可以帮助您将django项目与鼻子集成:

  

功能

     

Django测试中的所有优点,如......

     
      
  • ...
  •   
  • 无需将所有测试导入tests/__init__.py。这不仅可以节省繁忙工作,还可以避免意外遮蔽测试类的可能性。
  •   
  • ...
  •   

希望有所帮助。

答案 1 :(得分:2)

您需要将Tests更改为tests并将每个测试导入tests/__init__.py直到django 1.5 AFAIK。还有一个test runner,它将以unittest2发现工作的方式工作。此功能已集成到django1.6中。

答案 2 :(得分:1)

查看:running tests in Django

  

测试发现基于unittest模块的内置测试发现。默认情况下,这将在当前工作目录下的任何名为“test * .py”的文件中发现测试。