Django TestCase测试订单

时间:2010-04-05 20:34:26

标签: python django unit-testing

如果测试类中有多个方法,我发现要执行的顺序是按字母顺序排列的。但我想自定义执行顺序。如何定义执行顺序?

例如:testTestA将首先加载,而不是testTestB。

class Test(TestCase):
    def setUp(self):
        ...

    def testTestB(self):
        #test code

    def testTestA(self):
        #test code

3 个答案:

答案 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...开头的方法。 因此,您可以添加额外的辅助方法TestATestB,除非您明确调用它们,否则它们将无法运行。

答案 1 :(得分:10)

据我所知,除了重命名之外,没有办法订购测试。您能解释为什么需要按特定顺序运行测试用例吗?在单元测试中,它通常被认为是不好的做法,因为这意味着你的案件不是独立的。

答案 2 :(得分:6)

要更新主题(来自文档):

  

Order in which tests are executed

     

为了保证所有 TestCase 代码以干净开头   数据库,Django测试运行器按以下方式重新排序测试:

     
      
  • 首先运行所有TestCase个子类。
  •   
  • 然后,所有其他基于Django的   测试(基于SimpleTestCase的测试用例,包括   TransactionTestCase)运行时没有保证特定的顺序   也没有强制执行。
  •   
  • 然后进行任何其他unittest.TestCase测试   (包括doctests)可能会更改数据库而不进行恢复   到了原来的状态。
  •   
     

注意:新的测试顺序可能会显示出对测试的意外依赖性   案件订购。这是依赖于状态的doctests的情况   通过给定的TransactionTestCase测试留在数据库中,它们必须是   已更新为能够独立运行。