Subclassing unittest.TestCase?
Peter Otten
__peter__ at web.de
Wed Nov 3 10:16:36 EDT 2010
Roy Smith wrote:
> I'm using Python 2.6, with unittest2 imported as unittest.
>
> I'm writing a test suite for a web application. There is a subclass of
> TestCase for each basic page type. One thing that's in common between
> all the pages is that every page must have a valid copyright notice. It
> seems like the logical thing would be to put the common test(s) in a
> subclass unittest.TestCase and have all my real test cases derive from
> that:
>
> class CommonTestCase(unittest.TestCase):
> def test_copyright(self):
> self.assert_(find copyright notice in DOM tree)
>
> class HomepageTestCase(CommonTestCase):
> def setUp(self):
> self.url = "http://site.com"
>
> def test_whatever(self):
> self.assert_(whatever)
>
> This works fine as far as HomepageTestCase running test_copyright() and
> test_whatever(). The problem is that CommonTestCase *also* runs
> test_copyright(), which fails because there's no setUp(), and thus no
> retrieved page for it to work on.
>
> The hack that I came up with is:
>
> class CommonTestCase(unittest.TestCase):
> def test_copyright(self):
> if self.__class__.__name__ == 'CommonTestCase':
> return
> self.assert_(find copyright notice in DOM tree)
>
> which works, but it's ugly. It also counts
> CommonTestCase.test_copyright() as passing, which messes up the
> statistics. Is there a cleaner way to define some common test methods
> which all of my test cases can inherit, without having them be run in
> the base class?
Remove the base class from the module with
del CommonTestCase
before you invoke unittest.main().
Peter
More information about the Python-list
mailing list