Patch #787789: allow to pass custom TestRunner instances to unittest's

main() function.
This commit is contained in:
Georg Brandl 2007-03-07 09:21:06 +00:00
parent 15c5ce936f
commit d0a962506b
3 changed files with 20 additions and 5 deletions

View File

@ -290,6 +290,7 @@ Often, many small test cases will use the same fixture. In this case,
we would end up subclassing \class{SimpleWidgetTestCase} into many
small one-method classes such as
\class{DefaultWidgetSizeTestCase}. This is time-consuming and
discouraging, so in the same vein as JUnit, \module{unittest} provides
a simpler mechanism:
@ -540,7 +541,7 @@ easier.}
\begin{funcdesc}{main}{\optional{module\optional{,
defaultTest\optional{, argv\optional{,
testRunner\optional{, testRunner}}}}}}
testRunner\optional{, testLoader}}}}}}
A command-line program that runs a set of tests; this is primarily
for making test modules conveniently executable. The simplest use
for this function is to include the following line at the end of a
@ -550,6 +551,9 @@ easier.}
if __name__ == '__main__':
unittest.main()
\end{verbatim}
The \var{testRunner} argument can either be a test runner class or
an already created instance of it.
\end{funcdesc}
In some cases, the existing tests may have been written using the

View File

@ -776,7 +776,8 @@ Examples:
in MyTestCase
"""
def __init__(self, module='__main__', defaultTest=None,
argv=None, testRunner=None, testLoader=defaultTestLoader):
argv=None, testRunner=TextTestRunner,
testLoader=defaultTestLoader):
if type(module) == type(''):
self.module = __import__(module)
for part in module.split('.')[1:]:
@ -826,9 +827,16 @@ Examples:
self.module)
def runTests(self):
if self.testRunner is None:
self.testRunner = TextTestRunner(verbosity=self.verbosity)
result = self.testRunner.run(self.test)
if isinstance(self.testRunner, (type, types.ClassType)):
try:
testRunner = self.testRunner(verbosity=self.verbosity)
except TypeError:
# didn't accept the verbosity argument
testRunner = self.testRunner()
else:
# it is assumed to be a TestRunner instance
testRunner = self.testRunner
result = testRunner.run(self.test)
sys.exit(not result.wasSuccessful())
main = TestProgram

View File

@ -152,6 +152,9 @@ Core and builtins
Library
-------
- Patch #787789: allow to pass custom TestRunner instances to unittest's
main() function.
- Patches #1550273, #1550272: fix a few bugs in unittest and add a
comprehensive test suite for the module.