Python 如何在Django中以比应用程序更高的粒度对单元测试进行分组?
在Django项目中,单元测试通常是按应用程序组织的,Django提供了一个工具来运行所有测试、单个应用程序的测试、单个测试用例或单个测试方法 然而,我发现单个应用程序中的测试用例通常属于单独的逻辑组或集群,并且能够只运行单个测试组通常是有用的。例如,想象一下:Python 如何在Django中以比应用程序更高的粒度对单元测试进行分组?,python,django,unit-testing,Python,Django,Unit Testing,在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
。干杯