summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2011-01-03 17:00:11 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2011-01-03 17:00:11 (GMT)
commit32e1d8340c05fa62ba51dbd942bdc09a21e65f6e (patch)
tree4523249e3c25efec0cc94a82a9392894282d3990
parentfaa8c13ef43eda21a363524a7eb0ff1b361bbe67 (diff)
downloadcpython-32e1d8340c05fa62ba51dbd942bdc09a21e65f6e.zip
cpython-32e1d8340c05fa62ba51dbd942bdc09a21e65f6e.tar.gz
cpython-32e1d8340c05fa62ba51dbd942bdc09a21e65f6e.tar.bz2
Enable unittest.TestCase to be instantiated without providing a method name.
Changed unittestgui to show number of discovered tests in the status bar.
-rw-r--r--Doc/library/unittest.rst5
-rw-r--r--Lib/unittest/case.py11
-rw-r--r--Lib/unittest/test/test_case.py10
-rw-r--r--Misc/NEWS3
-rw-r--r--Tools/unittestgui/unittestgui.py6
5 files changed, 30 insertions, 5 deletions
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index ad6d314..564ff72 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -721,6 +721,11 @@ Test cases
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
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 004a9f5..0277ac8 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -274,12 +274,17 @@ class TestCase(object):
"""
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
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
index 9a09dfa..1513fbe 100644
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -77,6 +77,16 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
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
diff --git a/Misc/NEWS b/Misc/NEWS
index ec870e7..930b47e 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -23,6 +23,9 @@ Core and Builtins
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.
diff --git a/Tools/unittestgui/unittestgui.py b/Tools/unittestgui/unittestgui.py
index 0c48b49..b526646 100644
--- a/Tools/unittestgui/unittestgui.py
+++ b/Tools/unittestgui/unittestgui.py
@@ -276,13 +276,15 @@ class TkTestRunner(BaseGUITestRunner):
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):