Python unit test with base and sub class Python unit test with base and sub class python python

Python unit test with base and sub class


Do not use multiple inheritance, it will bite you later.

Instead you can just move your base class into the separate module or wrap it with the blank class:

class BaseTestCases:    class BaseTest(unittest.TestCase):        def testCommon(self):            print('Calling BaseTest:testCommon')            value = 5            self.assertEqual(value, 5)class SubTest1(BaseTestCases.BaseTest):    def testSub1(self):        print('Calling SubTest1:testSub1')        sub = 3        self.assertEqual(sub, 3)class SubTest2(BaseTestCases.BaseTest):    def testSub2(self):        print('Calling SubTest2:testSub2')        sub = 4        self.assertEqual(sub, 4)if __name__ == '__main__':    unittest.main()

The output:

Calling BaseTest:testCommon.Calling SubTest1:testSub1.Calling BaseTest:testCommon.Calling SubTest2:testSub2.----------------------------------------------------------------------Ran 4 tests in 0.001sOK


Use multiple inheritance, so your class with common tests doesn't itself inherit from TestCase.

import unittestclass CommonTests(object):    def testCommon(self):        print 'Calling BaseTest:testCommon'        value = 5        self.assertEquals(value, 5)class SubTest1(unittest.TestCase, CommonTests):    def testSub1(self):        print 'Calling SubTest1:testSub1'        sub = 3        self.assertEquals(sub, 3)class SubTest2(unittest.TestCase, CommonTests):    def testSub2(self):        print 'Calling SubTest2:testSub2'        sub = 4        self.assertEquals(sub, 4)if __name__ == '__main__':    unittest.main()


You can solve this problem with a single command:

del(BaseTest)

So the code would look like this:

import unittestclass BaseTest(unittest.TestCase):    def testCommon(self):        print 'Calling BaseTest:testCommon'        value = 5        self.assertEquals(value, 5)class SubTest1(BaseTest):    def testSub1(self):        print 'Calling SubTest1:testSub1'        sub = 3        self.assertEquals(sub, 3)class SubTest2(BaseTest):    def testSub2(self):        print 'Calling SubTest2:testSub2'        sub = 4        self.assertEquals(sub, 4)del(BaseTest)if __name__ == '__main__':    unittest.main()