views:

59

answers:

2

If there are several methods in the test class, I found that the order to execute is alphabetical. But I want to customize the order of execution. How to define the execution order?

For example: testTestA will be loaded first than testTestB.

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

    def testTestB(self):
        #test code

    def testTestA(self):
        #test code
+3  A: 

As far as I know, there is no way to order tests other than rename them. Could you explain why you need to run test cases in the specific order? In unit testing it usually considered as bad practice since it means that your cases are not independent.

Yaroslav
Like, for testing create an account and all following operations on account. What might be the alternative to this approach?
sza
sleske
I see. Thank you for your suggestion.
sza
+3  A: 

The philosophy behind unit-testing is that each test should be independent of all others. If in your case the code in testTestA must come before testTestB, then you could combine both into one test:

def testTestA_and_TestB(self):
    # test code from testTestA
    ...
    # test code from testTestB

or, perhaps better would be

def TestA(self):
    # test code
def TestB(self):
    # test code
def test_A_then_B(self):
    self.TestA()
    self.TestB()

The Test class only tests those methods who name begins with a lower-case test.... So you can put in extra helper methods TestA and TestB which won't get run unless you explicitly call them.

unutbu
+1: Done this more than once myself to chain tests together, reducing setup time.
S.Lott