Back

Explore Courses Blog Tutorials Interview Questions
0 votes
1 view
in Python by (12.7k points)

I currently have a couple of unit tests that share a typical arrangement of tests. Here's a model: 

import unittest

class 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)

if __name__ == '__main__':

    unittest.main()

Output:

Calling BaseTest:testCommon

.Calling BaseTest:testCommon

.Calling SubTest1:testSub1

.Calling BaseTest:testCommon

.Calling SubTest2:testSub2

.

----------------------------------------------------------------------

Ran 5 tests in 0.000s

OK

Is there an approach to revise the above so the absolute first testCommon isn't called? 

1 Answer

0 votes
by (26.4k points)

You can use Multiple inheritance, so your class with regular tests doesn't itself inherit from TestCase.

import unittest

class 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()

Are you interested to learn the concepts of Python? Join the python training course fast!

Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.4k questions

29.7k answers

500 comments

94.7k users

Browse Categories

...