Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中以比应用程序更高的粒度对单元测试进行分组?_Python_Django_Unit Testing - Fatal编程技术网

Python 如何在Django中以比应用程序更高的粒度对单元测试进行分组?

Python 如何在Django中以比应用程序更高的粒度对单元测试进行分组?,python,django,unit-testing,Python,Django,Unit Testing,在Django项目中,单元测试通常是按应用程序组织的,Django提供了一个工具来运行所有测试、单个应用程序的测试、单个测试用例或单个测试方法 然而,我发现单个应用程序中的测试用例通常属于单独的逻辑组或集群,并且能够只运行单个测试组通常是有用的。例如,想象一下: 我有几个测试用例,每个测试用例都包含一个模型的不同配置,我希望在开发模型时运行所有测试用例(并且只运行它们)。(这尤其麻烦,因为这样做的廉价方法是将测试用例组合在一起,所以现在您有了一个可以轻松运行的测试用例,但阅读和维护起来却非常困

在Django项目中,单元测试通常是按应用程序组织的,Django提供了一个工具来运行所有测试、单个应用程序的测试、单个测试用例或单个测试方法

然而,我发现单个应用程序中的测试用例通常属于单独的逻辑组或集群,并且能够只运行单个测试组通常是有用的。例如,想象一下:

  • 我有几个测试用例,每个测试用例都包含一个模型的不同配置,我希望在开发模型时运行所有测试用例(并且只运行它们)。(这尤其麻烦,因为这样做的廉价方法是将测试用例组合在一起,所以现在您有了一个可以轻松运行的测试用例,但阅读和维护起来却非常困难)
  • 我有一系列实用程序类,它们的测试速度非常快,因为它们不会命中数据库。重构这些测试时,我不需要运行模型测试和查看测试
我到处找。但是,虽然将测试拆分为多个文件(例如问题)相对简单,但似乎没有一种简单的方法可以单独运行测试组


那么,我是不是遗漏了什么?分组测试的秘诀是什么?

值得研究一下python的nose测试框架,作为解决此问题的一种方法

具体来说,您可以标记测试或设置测试的属性。然后只运行带有给定标记的测试子集(跨应用程序或整个项目)


请注意,nose扩展了unittest,因此现有的django unittest套件可能已经使用nose runner运行了。

对于django<1.6
我个人认为:

您有一个init文件:

myapp/tests/__init__.py :

from test1 import *
from test2 import *

def suite():
    import unittest
    #import doctest # If you want to use doctest

    TEST_CASES = ( 
     'sendim.tests.test1',
     'sendim.tests.test2',
    )   
    suite = unittest.TestSuite()

    #suite.addTest(doctest.DocTestSuite(object)) # object which have doctest
    for t in TEST_CASES :
        suite.addTest(unittest.TestLoader().loadTestsFromModule(__import__(t, globals(), locals(), fromlist=["*"])))
    return suite
例如,一个名为“TestCase1”的文件中的testcase:

myapp/tests/test1.py :

from django.utils import unittest

class TestCase1(unittest.TestCase) :
    # Your testcase
如果您启动
/manage.py test myapp
,它将启动每个测试用例。

否则,如果您启动`./manage.py test myapp.TestCase1,它将只执行这一个。

是的,这正是我想要的。我发现django nose提供了django所需的接口,包括一个测试运行程序和一个自定义测试命令!默认情况下,当您键入
/manage.py test myapp
时,它将启动
myapp.tests.suite()
。所以你如何编写,它将尝试启动套件应用程序的测试。谢谢,我误解了,你正在覆盖
suite
。干杯