Content-Length: 5889 | pFad | http://github.com/python/cpython/pull/136487.patch
thub.com
From 854c0f01b04f3867fd400836c2a0ed8a62f963bb Mon Sep 17 00:00:00 2001
From: Takuya Ueshin
Date: Wed, 9 Jul 2025 14:31:39 -0700
Subject: [PATCH 1/3] Fix unittest to return exit code 5 when setUpClass raises
an exception.
---
Lib/test/test_unittest/test_program.py | 20 ++++++++++++++++++++
Lib/test/test_unittest/test_setups.py | 19 +++++++++++++++++++
Lib/unittest/main.py | 8 ++++----
3 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/Lib/test/test_unittest/test_program.py b/Lib/test/test_unittest/test_program.py
index 6092ed292d8f60..6d1cc7e0008505 100644
--- a/Lib/test/test_unittest/test_program.py
+++ b/Lib/test/test_unittest/test_program.py
@@ -75,6 +75,14 @@ def testUnexpectedSuccess(self):
class Empty(unittest.TestCase):
pass
+ class SetUpClassFailure(unittest.TestCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ raise Exception
+ def testPass(self):
+ pass
+
class TestLoader(unittest.TestLoader):
"""Test loader that returns a suite containing the supplied testcase."""
@@ -191,6 +199,18 @@ def test_ExitEmptySuite(self):
out = stream.getvalue()
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('\nERROR: setUpClass (test.test_unittest.test_program.'
+ 'Test_TestProgram.SetUpClassFailure)\n', out)
+
class InitialisableProgram(unittest.TestProgram):
exit = False
diff --git a/Lib/test/test_unittest/test_setups.py b/Lib/test/test_unittest/test_setups.py
index 2df703ed9348a9..e59435897172b6 100644
--- a/Lib/test/test_unittest/test_setups.py
+++ b/Lib/test/test_unittest/test_setups.py
@@ -47,6 +47,25 @@ def test_two(self):
self.assertEqual(result.testsRun, 2)
self.assertEqual(len(result.errors), 0)
+ def test_setup_class_raising_error(self):
+ class Test(unittest.TestCase):
+ setUpCalled = 0
+ @classmethod
+ def setUpClass(cls):
+ Test.setUpCalled += 1
+ unittest.TestCase.setUpClass()
+ raise Exception("error")
+ def test_one(self):
+ pass
+ def test_two(self):
+ pass
+
+ result = self.runTests(Test)
+
+ self.assertEqual(Test.setUpCalled, 1)
+ self.assertEqual(result.testsRun, 0)
+ self.assertEqual(len(result.errors), 1)
+
def test_teardown_class(self):
class Test(unittest.TestCase):
tearDownCalled = 0
diff --git a/Lib/unittest/main.py b/Lib/unittest/main.py
index 6fd949581f3146..be99d93c78cca6 100644
--- a/Lib/unittest/main.py
+++ b/Lib/unittest/main.py
@@ -269,12 +269,12 @@ def runTests(self):
testRunner = self.testRunner
self.result = testRunner.run(self.test)
if self.exit:
- if self.result.testsRun == 0 and len(self.result.skipped) == 0:
+ if not self.result.wasSuccessful():
+ sys.exit(1)
+ elif self.result.testsRun == 0 and len(self.result.skipped) == 0:
sys.exit(_NO_TESTS_EXITCODE)
- elif self.result.wasSuccessful():
- sys.exit(0)
else:
- sys.exit(1)
+ sys.exit(0)
main = TestProgram
From 950f7a0537d0b99d6ff658b5e6eb139e96b3f381 Mon Sep 17 00:00:00 2001
From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com>
Date: Wed, 9 Jul 2025 21:45:52 +0000
Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?=
=?UTF-8?q?rb=5Fit.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst
diff --git a/Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst b/Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst
new file mode 100644
index 00000000000000..84542652128804
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst
@@ -0,0 +1 @@
+unittest runner: Don't exit 5 if setUpClass raises an exception
From 7fb4075fac7a1a0890ca5c29f7b8d78ba80ae259 Mon Sep 17 00:00:00 2001
From: Takuya Ueshin
Date: Wed, 9 Jul 2025 19:32:51 -0700
Subject: [PATCH 3/3] Fix.
---
Lib/test/test_unittest/test_setups.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Lib/test/test_unittest/test_setups.py b/Lib/test/test_unittest/test_setups.py
index e59435897172b6..bb3b67e5b62acc 100644
--- a/Lib/test/test_unittest/test_setups.py
+++ b/Lib/test/test_unittest/test_setups.py
@@ -54,7 +54,7 @@ class Test(unittest.TestCase):
def setUpClass(cls):
Test.setUpCalled += 1
unittest.TestCase.setUpClass()
- raise Exception("error")
+ raise Exception
def test_one(self):
pass
def test_two(self):
@@ -65,6 +65,7 @@ def test_two(self):
self.assertEqual(Test.setUpCalled, 1)
self.assertEqual(result.testsRun, 0)
self.assertEqual(len(result.errors), 1)
+ self.assertEqual(len(result.skipped), 0)
def test_teardown_class(self):
class Test(unittest.TestCase):
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/python/cpython/pull/136487.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy