mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-136442: Fix unittest to return exit code 5 when setUpClass raises an exception (#136487)
This commit is contained in:
parent
453d886f85
commit
53d65c840e
3 changed files with 26 additions and 5 deletions
|
|
@ -75,6 +75,14 @@ def testUnexpectedSuccess(self):
|
||||||
class Empty(unittest.TestCase):
|
class Empty(unittest.TestCase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class SetUpClassFailure(unittest.TestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super().setUpClass()
|
||||||
|
raise Exception
|
||||||
|
def testPass(self):
|
||||||
|
pass
|
||||||
|
|
||||||
class TestLoader(unittest.TestLoader):
|
class TestLoader(unittest.TestLoader):
|
||||||
"""Test loader that returns a suite containing the supplied testcase."""
|
"""Test loader that returns a suite containing the supplied testcase."""
|
||||||
|
|
||||||
|
|
@ -191,6 +199,18 @@ def test_ExitEmptySuite(self):
|
||||||
out = stream.getvalue()
|
out = stream.getvalue()
|
||||||
self.assertIn('\nNO TESTS RAN\n', out)
|
self.assertIn('\nNO TESTS RAN\n', out)
|
||||||
|
|
||||||
|
def test_ExitSetUpClassFailureSuite(self):
|
||||||
|
stream = BufferedWriter()
|
||||||
|
with self.assertRaises(SystemExit) as cm:
|
||||||
|
unittest.main(
|
||||||
|
argv=["setup_class_failure"],
|
||||||
|
testRunner=unittest.TextTestRunner(stream=stream),
|
||||||
|
testLoader=self.TestLoader(self.SetUpClassFailure))
|
||||||
|
self.assertEqual(cm.exception.code, 1)
|
||||||
|
out = stream.getvalue()
|
||||||
|
self.assertIn("ERROR: setUpClass", out)
|
||||||
|
self.assertIn("SetUpClassFailure", out)
|
||||||
|
|
||||||
|
|
||||||
class InitialisableProgram(unittest.TestProgram):
|
class InitialisableProgram(unittest.TestProgram):
|
||||||
exit = False
|
exit = False
|
||||||
|
|
|
||||||
|
|
@ -269,12 +269,12 @@ def runTests(self):
|
||||||
testRunner = self.testRunner
|
testRunner = self.testRunner
|
||||||
self.result = testRunner.run(self.test)
|
self.result = testRunner.run(self.test)
|
||||||
if self.exit:
|
if self.exit:
|
||||||
if self.result.testsRun == 0 and len(self.result.skipped) == 0:
|
if not self.result.wasSuccessful():
|
||||||
sys.exit(_NO_TESTS_EXITCODE)
|
|
||||||
elif self.result.wasSuccessful():
|
|
||||||
sys.exit(0)
|
|
||||||
else:
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
elif self.result.testsRun == 0 and len(self.result.skipped) == 0:
|
||||||
|
sys.exit(_NO_TESTS_EXITCODE)
|
||||||
|
else:
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
main = TestProgram
|
main = TestProgram
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Use exitcode ``1`` instead of ``5`` if :func:`unittest.TestCase.setUpClass` raises an exception
|
||||||
Loading…
Add table
Add a link
Reference in a new issue