summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Foord <michael@python.org>2011-03-14 23:01:46 (GMT)
committerMichael Foord <michael@python.org>2011-03-14 23:01:46 (GMT)
commit1341bb0019868345bab8adff94263c81e1d66eae (patch)
tree95af5b839e2972aa3d678484da0c2eac95fb2f69
parentba3a978fc1b877bd61602e6997d960a98e474311 (diff)
downloadcpython-1341bb0019868345bab8adff94263c81e1d66eae.zip
cpython-1341bb0019868345bab8adff94263c81e1d66eae.tar.gz
cpython-1341bb0019868345bab8adff94263c81e1d66eae.tar.bz2
Closes issue 11407. TestCase.run returns the result object used or created
-rw-r--r--Doc/library/unittest.rst7
-rw-r--r--Lib/unittest/case.py2
-rw-r--r--Lib/unittest/test/test_case.py43
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
5 files changed, 49 insertions, 7 deletions
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index a3de29b..a4e2cab 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -723,7 +723,7 @@ Test cases
Here, we create two instances of :class:`WidgetTestCase`, each of which runs a
single test.
- .. versionchanged::
+ .. versionchanged:: 3.2
`TestCase` can be instantiated successfully without providing a method
name. This makes it easier to experiment with `TestCase` from the
interactive interpreter.
@@ -792,11 +792,14 @@ Test cases
Run the test, collecting the result into the test result object passed as
*result*. If *result* is omitted or ``None``, a temporary result
object is created (by calling the :meth:`defaultTestResult` method) and
- used. The result object is not returned to :meth:`run`'s caller.
+ used. The result object is returned to :meth:`run`'s caller.
The same effect may be had by simply calling the :class:`TestCase`
instance.
+ .. versionchanged:: 3.3
+ Previous versions of ``run`` did not return the result. Neither did
+ calling an instance.
.. method:: skipTest(reason)
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 270e5e8..4e47707 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -469,7 +469,7 @@ class TestCase(object):
warnings.warn("TestResult has no addExpectedFailure method, reporting as passes",
RuntimeWarning)
result.addSuccess(self)
-
+ return result
finally:
result.stopTest(self)
if orig_result is None:
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
index 351b6f8..852ac86 100644
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -386,27 +386,62 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
self.assertIsInstance(Foo().id(), str)
- # "If result is omitted or None, a temporary result object is created
- # and used, but is not made available to the caller. As TestCase owns the
+ # "If result is omitted or None, a temporary result object is created,
+ # used, and is made available to the caller. As TestCase owns the
# temporary result startTestRun and stopTestRun are called.
def test_run__uses_defaultTestResult(self):
events = []
+ defaultResult = LoggingResult(events)
class Foo(unittest.TestCase):
def test(self):
events.append('test')
def defaultTestResult(self):
- return LoggingResult(events)
+ return defaultResult
# Make run() find a result object on its own
- Foo('test').run()
+ result = Foo('test').run()
+ self.assertIs(result, defaultResult)
expected = ['startTestRun', 'startTest', 'test', 'addSuccess',
'stopTest', 'stopTestRun']
self.assertEqual(events, expected)
+
+ # "The result object is returned to run's caller"
+ def test_run__returns_given_result(self):
+
+ class Foo(unittest.TestCase):
+ def test(self):
+ pass
+
+ result = unittest.TestResult()
+
+ retval = Foo('test').run(result)
+ self.assertIs(retval, result)
+
+
+ # "The same effect [as method run] may be had by simply calling the
+ # TestCase instance."
+ def test_call__invoking_an_instance_delegates_to_run(self):
+ resultIn = unittest.TestResult()
+ resultOut = unittest.TestResult()
+
+ class Foo(unittest.TestCase):
+ def test(self):
+ pass
+
+ def run(self, result):
+ self.assertIs(result, resultIn)
+ return resultOut
+
+ retval = Foo('test')(resultIn)
+
+ self.assertIs(retval, resultOut)
+
+
def testShortDescriptionWithoutDocstring(self):
self.assertIsNone(self.shortDescription())
diff --git a/Misc/ACKS b/Misc/ACKS
index 117cd8d..a641547 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -351,6 +351,7 @@ Lynda Hardman
Derek Harland
Jason Harper
Brian Harring
+Jonathan Hartley
Larry Hastings
Shane Hathaway
Rycharde Hawkes
diff --git a/Misc/NEWS b/Misc/NEWS
index 2597252..3aecf51 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -68,6 +68,9 @@ Core and Builtins
Library
-------
+- Issue #11407: `TestCase.run` returns the result object used or created.
+ Contributed by Janathan Hartley.
+
- Issue #11500: Fixed a bug in the os x proxy bypass code for fully qualified
IP addresses in the proxy exception list.