[Python-checkins] r87689 - in python/branches/py3k: Doc/library/unittest.rst Lib/unittest/case.py Lib/unittest/test/test_case.py Misc/NEWS Tools/unittestgui/unittestgui.py

michael.foord python-checkins at python.org
Mon Jan 3 18:00:11 CET 2011


Author: michael.foord
Date: Mon Jan  3 18:00:11 2011
New Revision: 87689

Log:
Enable unittest.TestCase to be instantiated without providing a method name.
Changed unittestgui to show number of discovered tests in the status bar.

Modified:
   python/branches/py3k/Doc/library/unittest.rst
   python/branches/py3k/Lib/unittest/case.py
   python/branches/py3k/Lib/unittest/test/test_case.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Tools/unittestgui/unittestgui.py

Modified: python/branches/py3k/Doc/library/unittest.rst
==============================================================================
--- python/branches/py3k/Doc/library/unittest.rst	(original)
+++ python/branches/py3k/Doc/library/unittest.rst	Mon Jan  3 18:00:11 2011
@@ -721,6 +721,11 @@
    Here, we create two instances of :class:`WidgetTestCase`, each of which runs a
    single test.
 
+   .. versionchanged::
+      `TestCase` can be instantiated successfully without providing a method
+      name. This makes it easier to experiment with `TestCase` from the
+      interactive interpreter.
+
    *methodName* defaults to :meth:`runTest`.
 
    :class:`TestCase` instances provide three groups of methods: one group used

Modified: python/branches/py3k/Lib/unittest/case.py
==============================================================================
--- python/branches/py3k/Lib/unittest/case.py	(original)
+++ python/branches/py3k/Lib/unittest/case.py	Mon Jan  3 18:00:11 2011
@@ -274,12 +274,17 @@
         """
         self._testMethodName = methodName
         self._outcomeForDoCleanups = None
+        self._testMethodDoc = 'No test'
         try:
             testMethod = getattr(self, methodName)
         except AttributeError:
-            raise ValueError("no such test method in %s: %s" %
-                  (self.__class__, methodName))
-        self._testMethodDoc = testMethod.__doc__
+            if methodName != 'runTest':
+                # we allow instantiation with no explicit method name
+                # but not an *incorrect* or missing method name
+                raise ValueError("no such test method in %s: %s" %
+                      (self.__class__, methodName))
+        else:
+            self._testMethodDoc = testMethod.__doc__
         self._cleanups = []
 
         # Map types to custom assertEqual functions that will compare

Modified: python/branches/py3k/Lib/unittest/test/test_case.py
==============================================================================
--- python/branches/py3k/Lib/unittest/test/test_case.py	(original)
+++ python/branches/py3k/Lib/unittest/test/test_case.py	Mon Jan  3 18:00:11 2011
@@ -77,6 +77,16 @@
 
         self.assertEqual(Test().id()[-13:], '.Test.runTest')
 
+        # test that TestCase can be instantiated with no args
+        # primarily for use at the interactive interpreter
+        test = unittest.TestCase()
+        test.assertEqual(3, 3)
+        with test.assertRaises(test.failureException):
+            test.assertEqual(3, 2)
+
+        with self.assertRaises(AttributeError):
+            test.run()
+
     # "class TestCase([methodName])"
     # ...
     # "Each instance of TestCase will run a single test method: the

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Mon Jan  3 18:00:11 2011
@@ -23,6 +23,9 @@
 Library
 -------
 
+- `unittest.TestCase` can be instantiated without a method name; for simpler
+  exploration from the interactive interpreter.
+
 - Issue #10798: Reject supporting concurrent.futures if the system has too
   few POSIX semaphores.
 

Modified: python/branches/py3k/Tools/unittestgui/unittestgui.py
==============================================================================
--- python/branches/py3k/Tools/unittestgui/unittestgui.py	(original)
+++ python/branches/py3k/Tools/unittestgui/unittestgui.py	Mon Jan  3 18:00:11 2011
@@ -276,13 +276,15 @@
         self.test_file_glob_pattern = d.test_file_glob_pattern
 
     def notifyTestsDiscovered(self, test_suite):
+        discovered = test_suite.countTestCases()
         self.runCountVar.set(0)
         self.failCountVar.set(0)
         self.errorCountVar.set(0)
-        self.remainingCountVar.set(test_suite.countTestCases())
+        self.remainingCountVar.set(discovered)
         self.progressBar.setProgressFraction(0.0)
         self.errorListbox.delete(0, tk.END)
-        self.statusVar.set("Discovering tests from %s" % self.directory_to_read)
+        self.statusVar.set("Discovering tests from %s. Found: %s" %
+            (self.directory_to_read, discovered))
         self.stopGoButton['state'] = tk.NORMAL
 
     def createWidgets(self):


More information about the Python-checkins mailing list