Django:tests.py作为模块

时间:2015-08-01 03:10:20

标签: python django unit-testing testing python-module

背景

我正在使用Django 1.8。

我开始测试它。

当我使用models.pyviews.py时,我通常会删除它们,并创建一个具有相同名称的模块文件夹来替换。

通过这种方式,我可以将模型和视图拆分为不同的代码文件,并使其易于编辑。

问题:

但是当我尝试将tests.py更改为模块文件夹时,我发现__init__.py中的测试用例无法运行。

怎么了?如果我想这样做,有什么办法吗?

请帮助,谢谢。

2 个答案:

答案 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.barviews.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']

正如您所看到的,所有常见任务,例如分配特定测试数据都在此基类中完成。