[TIP] How do I run the same test on many different classes?

Matthew Wilson matt at tplus1.com
Sun Dec 13 11:45:55 PST 2009

This is one of those problems that I know how to solve in an ugly way,
but I want to learn a better way.

I need to write a class that acts like a dictionary with some other
tweaks bolted on.

I wrote a single unittest.TestCase class that tests for all the
features I care about.  Pretend that the TestCase subclass is called
TestTask and the class I want to make will be named Task.

I have several ideas about how to build this class and I want to use
the TestTask class as a pass-fail filter.  Pretend I'll name each idea
Task1, Task2, Task3, etc.

Then I want to pass Task1, Task2, etc into unittest.TestCase so it
would run the tests on an instance of that class.

I experimented with something like this:

    >>> import task, test_task, unittest
    >>> Task = task.Task1
    >>> tl = unittest.TestLoader()
    >>> tl.loadTestsFromModule(test_task)
    >>> suite = tl.loadTestsFromModule(test_task)
    >>> unittest.TextTestRunner().run(suite)

Of course, that blows up because my test_task.TestTask class depends
on a global Task class that isn't defined when I defined that module.

All feedback is welcome.


W. Matthew Wilson
matt at tplus1.com

More information about the testing-in-python mailing list