我正在使用Django 1.8。
我开始测试它。
当我使用models.py
或views.py
时,我通常会删除它们,并创建一个具有相同名称的模块文件夹来替换。
通过这种方式,我可以将模型和视图拆分为不同的代码文件,并使其易于编辑。
但是当我尝试将tests.py
更改为模块文件夹时,我发现__init__.py
中的测试用例无法运行。
怎么了?如果我想这样做,有什么办法吗?
请帮助,谢谢。
答案 0 :(得分:2)
来自docs:
测试发现基于unittest模块的内置测试 发现。默认情况下,这将在任何名为的文件中发现测试 当前工作目录下的“test * .py”。
所以我想__init__.py
中的测试不会被自动发现。
答案 1 :(得分:1)
虽然您的问题已经得到解答,但我想分享我的测试设置。
假设我有一个具有以下结构的应用程序foo
foo
admin.py
apps.py
fixtures
testdata_01.json
forms
bar.py
__init__.py
__init__.py
models
bar.py
__init__.py
static
foo
base.css
foo.js
templates
foo
home.html
...
tests
forms
bar.py
__init__.py
views
bar.py
__init__.py
__init__.py
test_run.py
urls.py
views
bar.py
__init__.py
正如您所看到的,我的应用中有一些Bar
模型。所有相应的元素都在它们自己的模块中,即forms.bar
和views.bar
。
现在看看tests
模块:如前所述,Django测试运行器将自动运行test*.py
中的所有测试,在我的设置中为test.test_run.py
。
<强> test_run.py 强>
from .forms.bar import *
from .views.bar import *
正如您所看到的,真正的测试是在同名文件中,因此我可以一目了然地看到应用程序的哪个部分将被测试,即tests.forms.bar
包括与{{Bar
的表单相关的所有测试。 1}} class。
<强>测试/形式/ bar.py 强>
from ...tests import FooTest
class FooBarFormTests(FooTest):
"""Contains all tests for BarForm"""
def test_constructor(self):
self.assertTrue(True)
def test_clean(self):
self.assertTrue(False)
您是否注意到基类FooTest
?此课程位于tests/__init__.py
。
<强>测试/ __初始化__。PY 强>
from django.test import TestCase
class FooTest(TestCase):
"""Base class for all app specific tests"""
fixtures = ['testdata_01.json']
正如您所看到的,所有常见任务,例如分配特定测试数据都在此基类中完成。