如果测试类中有多个方法,我发现要执行的顺序是按字母顺序排列的。但我想自定义执行顺序。如何定义执行顺序?
例如:testTestA将首先加载,而不是testTestB。
class Test(TestCase):
def setUp(self):
...
def testTestB(self):
#test code
def testTestA(self):
#test code
答案 0 :(得分:49)
单元测试的一个原则是每个测试应该独立于所有其他测试。 如果在您的情况下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
,除非您明确调用它们,否则它们将无法运行。
答案 1 :(得分:10)
据我所知,除了重命名之外,没有办法订购测试。您能解释为什么需要按特定顺序运行测试用例吗?在单元测试中,它通常被认为是不好的做法,因为这意味着你的案件不是独立的。
答案 2 :(得分:6)
要更新主题(来自文档):
Order in which tests are executed
为了保证所有
TestCase
代码以干净开头 数据库,Django测试运行器按以下方式重新排序测试:
- 首先运行所有
TestCase
个子类。- 然后,所有其他基于Django的 测试(基于
SimpleTestCase
的测试用例,包括TransactionTestCase
)运行时没有保证特定的顺序 也没有强制执行。- 然后进行任何其他
unittest.TestCase
测试 (包括doctests
)可能会更改数据库而不进行恢复 到了原来的状态。注意:新的测试顺序可能会显示出对测试的意外依赖性 案件订购。这是依赖于状态的doctests的情况 通过给定的
TransactionTestCase
测试留在数据库中,它们必须是 已更新为能够独立运行。