Kaydet (Commit) 18f22989 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Issue #22894: TestCase.subTest() would cause the test suite to be stopped when…

Issue #22894: TestCase.subTest() would cause the test suite to be stopped when in failfast mode, even in the absence of failures.
üst a21de3d4
...@@ -121,7 +121,6 @@ class TestResult(object): ...@@ -121,7 +121,6 @@ class TestResult(object):
self.failures.append((test, self._exc_info_to_string(err, test))) self.failures.append((test, self._exc_info_to_string(err, test)))
self._mirrorOutput = True self._mirrorOutput = True
@failfast
def addSubTest(self, test, subtest, err): def addSubTest(self, test, subtest, err):
"""Called at the end of a subtest. """Called at the end of a subtest.
'err' is None if the subtest ended successfully, otherwise it's a 'err' is None if the subtest ended successfully, otherwise it's a
...@@ -130,6 +129,8 @@ class TestResult(object): ...@@ -130,6 +129,8 @@ class TestResult(object):
# By default, we don't do anything with successful subtests, but # By default, we don't do anything with successful subtests, but
# more sophisticated test results might want to record them. # more sophisticated test results might want to record them.
if err is not None: if err is not None:
if getattr(self, 'failfast', False):
self.stop()
if issubclass(err[0], test.failureException): if issubclass(err[0], test.failureException):
errors = self.failures errors = self.failures
else: else:
......
...@@ -397,6 +397,34 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing): ...@@ -397,6 +397,34 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
Foo(events).run(result) Foo(events).run(result)
self.assertEqual(events, expected) self.assertEqual(events, expected)
def test_subtests_failfast(self):
# Ensure proper test flow with subtests and failfast (issue #22894)
events = []
class Foo(unittest.TestCase):
def test_a(self):
with self.subTest():
events.append('a1')
events.append('a2')
def test_b(self):
with self.subTest():
events.append('b1')
with self.subTest():
self.fail('failure')
events.append('b2')
def test_c(self):
events.append('c')
result = unittest.TestResult()
result.failfast = True
suite = unittest.makeSuite(Foo)
suite.run(result)
expected = ['a1', 'a2', 'b1']
self.assertEqual(events, expected)
# "This class attribute gives the exception raised by the test() method. # "This class attribute gives the exception raised by the test() method.
# If a test framework needs to use a specialized exception, possibly to # If a test framework needs to use a specialized exception, possibly to
# carry additional information, it must subclass this exception in # carry additional information, it must subclass this exception in
......
...@@ -36,6 +36,9 @@ Core and Builtins ...@@ -36,6 +36,9 @@ Core and Builtins
Library Library
------- -------
- Issue #22894: TestCase.subTest() would cause the test suite to be stopped
when in failfast mode, even in the absence of failures.
- Issue #22638: SSLv3 is now disabled throughout the standard library. - Issue #22638: SSLv3 is now disabled throughout the standard library.
It can still be enabled by instantiating a SSLContext manually. It can still be enabled by instantiating a SSLContext manually.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment