Skip to content

Commit

Permalink
Closes issue 11407. TestCase.run returns the result object used or cr…
Browse files Browse the repository at this point in the history
…eated
  • Loading branch information
voidspace committed Mar 14, 2011
1 parent ba3a978 commit 1341bb0
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 7 deletions.
7 changes: 5 additions & 2 deletions Doc/library/unittest.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)

Expand Down
2 changes: 1 addition & 1 deletion Lib/unittest/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ def run(self, result=None):
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:
Expand Down
43 changes: 39 additions & 4 deletions Lib/unittest/test/test_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,27 +386,62 @@ def runTest(self):
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())

Expand Down
1 change: 1 addition & 0 deletions Misc/ACKS
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,7 @@ Lynda Hardman
Derek Harland
Jason Harper
Brian Harring
Jonathan Hartley
Larry Hastings
Shane Hathaway
Rycharde Hawkes
Expand Down
3 changes: 3 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down

0 comments on commit 1341bb0

Please sign in to comment.