Skip to content

Commit 53d65c8

Browse files
authored
pythongh-136442: Fix unittest to return exit code 5 when setUpClass raises an exception (python#136487)
1 parent 453d886 commit 53d65c8

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

Lib/test/test_unittest/test_program.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ def testUnexpectedSuccess(self):
7575
class Empty(unittest.TestCase):
7676
pass
7777

78+
class SetUpClassFailure(unittest.TestCase):
79+
@classmethod
80+
def setUpClass(cls):
81+
super().setUpClass()
82+
raise Exception
83+
def testPass(self):
84+
pass
85+
7886
class TestLoader(unittest.TestLoader):
7987
"""Test loader that returns a suite containing the supplied testcase."""
8088

@@ -191,6 +199,18 @@ def test_ExitEmptySuite(self):
191199
out = stream.getvalue()
192200
self.assertIn('\nNO TESTS RAN\n', out)
193201

202+
def test_ExitSetUpClassFailureSuite(self):
203+
stream = BufferedWriter()
204+
with self.assertRaises(SystemExit) as cm:
205+
unittest.main(
206+
argv=["setup_class_failure"],
207+
testRunner=unittest.TextTestRunner(stream=stream),
208+
testLoader=self.TestLoader(self.SetUpClassFailure))
209+
self.assertEqual(cm.exception.code, 1)
210+
out = stream.getvalue()
211+
self.assertIn("ERROR: setUpClass", out)
212+
self.assertIn("SetUpClassFailure", out)
213+
194214

195215
class InitialisableProgram(unittest.TestProgram):
196216
exit = False

Lib/unittest/main.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,12 @@ def runTests(self):
269269
testRunner = self.testRunner
270270
self.result = testRunner.run(self.test)
271271
if self.exit:
272-
if self.result.testsRun == 0 and len(self.result.skipped) == 0:
272+
if not self.result.wasSuccessful():
273+
sys.exit(1)
274+
elif self.result.testsRun == 0 and len(self.result.skipped) == 0:
273275
sys.exit(_NO_TESTS_EXITCODE)
274-
elif self.result.wasSuccessful():
275-
sys.exit(0)
276276
else:
277-
sys.exit(1)
277+
sys.exit(0)
278278

279279

280280
main = TestProgram
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Use exitcode ``1`` instead of ``5`` if :func:`unittest.TestCase.setUpClass` raises an exception

0 commit comments

Comments
 (0)