]> granicus.if.org Git - python/commitdiff
Patch #787789: allow to pass custom TestRunner instances to unittest's
authorGeorg Brandl <georg@python.org>
Wed, 7 Mar 2007 09:21:06 +0000 (09:21 +0000)
committerGeorg Brandl <georg@python.org>
Wed, 7 Mar 2007 09:21:06 +0000 (09:21 +0000)
main() function.

Doc/lib/libunittest.tex
Lib/unittest.py
Misc/NEWS

index 350abae7863bc7bdfd054dd196e748f9313498a2..782c6edc925676a6225516f65fc653b71b0b0709 100644 (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
index abd922383628dadcf4b2005c49a08b005f6d94fe..0d69f5268702f4546ba7a25a88b159c2da034345 100644 (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
index 34ed2c76464755f203a225f5fe554183fde97265..0452f83eba7bccbc0f27910d976ef7c8557c6b11 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.