From: Gregory P. Smith Date: Mon, 20 Jan 2014 09:11:18 +0000 (-0800) Subject: Fixes Issue #20165: The unittest module no longer considers tests marked with X-Git-Tag: v3.4.0b3~90 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a6d4bf671699152fb417e8f8ba899aa5e1d8d42;p=python Fixes Issue #20165: The unittest module no longer considers tests marked with @expectedFailure successful if they pass. --- diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 5cbc51b7fc..537cc3b6d2 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -1772,6 +1772,10 @@ Loading and running tests Return ``True`` if all tests run so far have passed, otherwise returns ``False``. + .. versionchanged:: 3.4 + Returns ``False`` if there were any :attr:`unexpectedSuccesses` + from tests marked with the :func:`expectedFailure` decorator. + .. method:: stop() diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py index f3f4b676a3..b967a60a01 100644 --- a/Lib/unittest/result.py +++ b/Lib/unittest/result.py @@ -156,11 +156,16 @@ class TestResult(object): self.unexpectedSuccesses.append(test) def wasSuccessful(self): - "Tells whether or not this result was a success" - return len(self.failures) == len(self.errors) == 0 + """Tells whether or not this result was a success.""" + # The hasattr check is for test_result's OldResult test. That + # way this method works on objects that lack the attribute. + # (where would such result intances come from? old stored pickles?) + return ((len(self.failures) == len(self.errors) == 0) and + (not hasattr(self, 'unexpectedSuccesses') or + len(self.unexpectedSuccesses) == 0)) def stop(self): - "Indicates that the tests should be aborted" + """Indicates that the tests should be aborted.""" self.shouldStop = True def _exc_info_to_string(self, err, test): diff --git a/Lib/unittest/test/test_skipping.py b/Lib/unittest/test/test_skipping.py index e18caa48ba..314a7a4d0f 100644 --- a/Lib/unittest/test/test_skipping.py +++ b/Lib/unittest/test/test_skipping.py @@ -158,7 +158,7 @@ class Test_TestSkipping(unittest.TestCase): ['startTest', 'addUnexpectedSuccess', 'stopTest']) self.assertFalse(result.failures) self.assertEqual(result.unexpectedSuccesses, [test]) - self.assertTrue(result.wasSuccessful()) + self.assertFalse(result.wasSuccessful()) def test_unexpected_success_subtests(self): # Success in all subtests counts as the unexpected success of @@ -182,7 +182,7 @@ class Test_TestSkipping(unittest.TestCase): 'addUnexpectedSuccess', 'stopTest']) self.assertFalse(result.failures) self.assertEqual(result.unexpectedSuccesses, [test]) - self.assertTrue(result.wasSuccessful()) + self.assertFalse(result.wasSuccessful()) def test_skip_doesnt_run_setup(self): class Foo(unittest.TestCase): diff --git a/Misc/NEWS b/Misc/NEWS index faac326ed2..19e2a6e9f1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -25,6 +25,9 @@ Core and Builtins Library ------- +- Issue #20165: The unittest module no longer considers tests marked with + @expectedFailure successful if they pass. + - Issue #18574: Added missing newline in 100-Continue reply from http.server.BaseHTTPRequestHandler. Patch by Nikolaus Rath.