[TIP] adding custom tests to a unittest test run

Chris Jerdonek chris.jerdonek at gmail.com
Tue May 15 21:25:28 PDT 2012

Hi, I was curious what others do in the following situation.

I often have the need to add extra tests to my unittest.main() test
runs.  The tests I need to add are tests that depend on data obtained
at run-time, e.g. user-provided command-line options.  I would like to
add these tests to unittest.main() in a way that doesn't depend on
"global state."

So far, the best I've come up with is the below.  Is there a better
solution?  What do others recommend?

[Also see: https://gist.github.com/2707352 ]

import unittest

def make_test_program_class(extra_tests):
    Return a unittest.TestProgram subclass that adds a list of custom tests.


      extra_tests: an iterable of TestCase and TestSuite instances to add in
        addition to the usual tests loaded when calling createTests().
        cf. http://docs.python.org/py3k/library/unittest.html#unittest.TestSuite.addTests

    class MyTestProgram(unittest.TestProgram):

        def createTests(self):
            super(PystacheTestProgram, self).createTests()

    return MyTestProgram

extra_tests = create_extra_tests(data)
test_program_class = make_test_program_class(extra_tests)

# In this constructor call you can include any of the arguments supported
# by unittest.main().
test_program_class()  # runs tests.


More information about the testing-in-python mailing list