Commit 80928857 authored by Georg Brandl's avatar Georg Brandl

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

main() function.
parent 3f4d877b
...@@ -290,6 +290,7 @@ Often, many small test cases will use the same fixture. In this case, ...@@ -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 we would end up subclassing \class{SimpleWidgetTestCase} into many
small one-method classes such as small one-method classes such as
\class{DefaultWidgetSizeTestCase}. This is time-consuming and \class{DefaultWidgetSizeTestCase}. This is time-consuming and
discouraging, so in the same vein as JUnit, \module{unittest} provides discouraging, so in the same vein as JUnit, \module{unittest} provides
a simpler mechanism: a simpler mechanism:
...@@ -540,7 +541,7 @@ easier.} ...@@ -540,7 +541,7 @@ easier.}
\begin{funcdesc}{main}{\optional{module\optional{, \begin{funcdesc}{main}{\optional{module\optional{,
defaultTest\optional{, argv\optional{, defaultTest\optional{, argv\optional{,
testRunner\optional{, testRunner}}}}}} testRunner\optional{, testLoader}}}}}}
A command-line program that runs a set of tests; this is primarily A command-line program that runs a set of tests; this is primarily
for making test modules conveniently executable. The simplest use for making test modules conveniently executable. The simplest use
for this function is to include the following line at the end of a for this function is to include the following line at the end of a
...@@ -550,6 +551,9 @@ easier.} ...@@ -550,6 +551,9 @@ easier.}
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
\end{verbatim} \end{verbatim}
The \var{testRunner} argument can either be a test runner class or
an already created instance of it.
\end{funcdesc} \end{funcdesc}
In some cases, the existing tests may have been written using the In some cases, the existing tests may have been written using the
......
...@@ -776,7 +776,8 @@ Examples: ...@@ -776,7 +776,8 @@ Examples:
in MyTestCase in MyTestCase
""" """
def __init__(self, module='__main__', defaultTest=None, def __init__(self, module='__main__', defaultTest=None,
argv=None, testRunner=None, testLoader=defaultTestLoader): argv=None, testRunner=TextTestRunner,
testLoader=defaultTestLoader):
if type(module) == type(''): if type(module) == type(''):
self.module = __import__(module) self.module = __import__(module)
for part in module.split('.')[1:]: for part in module.split('.')[1:]:
...@@ -826,9 +827,16 @@ Examples: ...@@ -826,9 +827,16 @@ Examples:
self.module) self.module)
def runTests(self): def runTests(self):
if self.testRunner is None: if isinstance(self.testRunner, (type, types.ClassType)):
self.testRunner = TextTestRunner(verbosity=self.verbosity) try:
result = self.testRunner.run(self.test) 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()) sys.exit(not result.wasSuccessful())
main = TestProgram main = TestProgram
......
...@@ -152,6 +152,9 @@ Core and builtins ...@@ -152,6 +152,9 @@ Core and builtins
Library 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 - Patches #1550273, #1550272: fix a few bugs in unittest and add a
comprehensive test suite for the module. comprehensive test suite for the module.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment