我有以下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结构选中来运行?
答案 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)
测试发现基于unittest模块的内置测试发现。默认情况下,这将在当前工作目录下的任何名为“test * .py”的文件中发现测试。