Answers:
行为在Django 1.6中已更改,因此不再需要创建包。只要命名您的文件test*.py
。
在运行测试时,测试实用程序的默认行为是在名称以test开头的任何文件中查找所有测试用例(即unittest.TestCase的子类),并自动从这些测试用例中构建测试套件,并运行该套件。
根据Django 1.6文档,
测试发现基于unittest模块的内置测试发现。默认情况下,它将在当前工作目录下的任何名为“ test * .py”的文件中发现测试。
先前的行为,来自Django 1.5文档:
在运行测试时,测试实用程序的默认行为是在models.py和tests.py中找到所有测试用例(即unittest.TestCase的子类),并根据这些测试用例自动构建测试套件,并运行该套件。
定义模块测试套件的另一种方法是:如果在models.py或tests.py中定义了一个名为suite()的函数,则Django测试运行器将使用该函数为该模块构造测试套件。这遵循建议的单元测试组织。有关如何构造复杂的测试套件的更多详细信息,请参见Python文档。
test*.py
文件名为文件夹中tests
,以保持清洁的文件夹-这是可能的,但你必须运行./manage.py test app.tests
和所有相关的进口需要升了一级(from .models
变得from ..models
)。
请注意,这种做法无异于Django的1.6不再有效,看到这个帖子。
您可以在内部创建tests
文件夹___init___.py
(以使其成为一个包)。然后在其中添加拆分测试.py文件,并将所有文件导入___init___.py
。
即:替换 test.py
用外观和行为类似于文件的模块文件:
tests
在相关应用下创建目录
应用程式 app \ models.py app \ views.py 应用\测试 app \ tests \ __ init__.py app \ tests \ bananas.py app \ tests \ apples.py
将子模块导入到app\tests\__init__.py
:
from bananas import *
from apples import *
现在,您可以使用./manage.py,就像它们都在一个文件中一样:
./manage.py test app.some_test_in_bananas
python manage.py test myapp
那么实际上这个答案确实有效。(刚刚尝试过)
托马斯(Tomasz)所说的答案是正确的。但是,确保导入__init__.py
的文件与您的文件结构匹配可能会很麻烦。
要自动检测文件夹中的所有测试,可以在__init__.py
以下位置添加:
import unittest
def suite():
return unittest.TestLoader().discover("appname.tests", pattern="*.py")
这将允许您运行,./manage.py test appname
但不能处理运行特定的测试。为此,您可以使用以下代码(也在中__init__.py
):
import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(module_name).load_module(module_name)
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
exec ('%s = obj' % obj.__name__)
现在,您可以通过运行所有测试,也可以通过运行manage.py test app
特定测试manage.py test app.TestApples
__init__.py
sys.modules[packagename]
。一个快速的解决方法是对del
导致上述问题的任何问题进行解决。(或者您可以重命名文件夹;))
python manage.py test appName
)时,第二段代码将引发错误,指出该错误__path__
不可用。我通过将第二个代码段包装在if '__path__' in locals():
支票中来避免了这种情况,从而达到了目的。感谢你的回答!
http://docs.python.org/library/unittest.html#organizing-tests讨论了将文件拆分为模块的过程,其上方的部分提供了一个示例。
无需在init中编写任何代码。只需在您的应用程序中创建一个子目录。唯一的要求就是不称其为测试* 例如
app/
app/__init_.py
app/serializers.py
app/testing/
app/testing/__init__.py
app/testing/tests_serializers.py
我认为./manage.py test
只是运行所有测试技巧(在Django> = 1.7中)。
如果你的组织测试是关于分组和采樱桃谬误和你的风扇nose
使用Django的鼻子:
python manage.py test another.test:TestCase.test_method
如果您知道鼻子,那么您就会知道如何对所有文件“通配”更好。
聚苯乙烯
这只是一个更好的做法。希望有帮助。答案是从这里借来的:当您的应用程序具有测试目录时,在Django中运行特定的测试用例