Django TestCase 测试顺序
如果测试类里面有好几个方法,我发现它们的执行顺序是按字母顺序来的。但是我想自定义一下执行的顺序。那该怎么定义执行的顺序呢?
举个例子:testTestA会比testTestB先执行。
class Test(TestCase):
def setUp(self):
...
def testTestB(self):
#test code
def testTestA(self):
#test code
3 个回答
8
关于这个话题的更新(来自文档):
为了确保所有的
TestCase
代码都是在一个干净的数据库上开始运行,Django 的测试运行器会按照以下顺序重新排列测试:
- 首先运行所有的
TestCase
子类。- 接着,运行所有其他基于 Django 的测试(这些测试是基于
SimpleTestCase
的,包括TransactionTestCase
),这些测试之间没有特别的顺序保证。- 最后,运行任何其他的
unittest.TestCase
测试(包括doctests
),这些测试可能会改变数据库的状态,但不会把它恢复到原来的状态。注意:新的测试顺序可能会暴露出测试用例之间意想不到的依赖关系。比如,有些 doctests 依赖于某个
TransactionTestCase
测试在数据库中留下的状态,因此它们需要更新,以便能够独立运行。
11
据我了解,除了重命名测试用例之外,似乎没有其他方法可以对测试进行排序。你能解释一下为什么需要按照特定顺序运行测试用例吗?在单元测试中,通常认为这样做是不好的做法,因为这意味着你的测试用例之间并不是独立的。
76
单元测试的一个原则是,每个测试都应该独立于其他测试。如果在你的情况下,testTestA 必须在 testTestB 之前执行,那么你可以把这两个测试合并成一个:
def testTestA_and_TestB(self):
# test code from testTestA
...
# test code from testTestB
或者,可能更好的做法是:
def TestA(self):
# test code
def TestB(self):
# test code
def test_A_then_B(self):
self.TestA()
self.TestB()
Test
类只会测试那些名字以小写 test...
开头的方法。所以你可以添加一些额外的辅助方法 TestA
和 TestB
,这些方法只有在你明确调用它们的时候才会被执行。