summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/unittest/case.py10
-rw-r--r--Lib/unittest/test/test_skipping.py66
-rw-r--r--Misc/NEWS.d/next/Library/2021-09-18-13-14-57.bpo-36674.a2k5Zb.rst2
3 files changed, 77 insertions, 1 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index e2f0ed3289..9fbf8524fc 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -653,8 +653,16 @@ class TestCase(object):
def debug(self):
"""Run the test without collecting errors in a TestResult"""
+ testMethod = getattr(self, self._testMethodName)
+ if (getattr(self.__class__, "__unittest_skip__", False) or
+ getattr(testMethod, "__unittest_skip__", False)):
+ # If the class or method was skipped.
+ skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
+ or getattr(testMethod, '__unittest_skip_why__', ''))
+ raise SkipTest(skip_why)
+
self.setUp()
- getattr(self, self._testMethodName)()
+ testMethod()
self.tearDown()
while self._cleanups:
function, args, kwargs = self._cleanups.pop(-1)
diff --git a/Lib/unittest/test/test_skipping.py b/Lib/unittest/test/test_skipping.py
index c14410afbe..7cb9d33f5e 100644
--- a/Lib/unittest/test/test_skipping.py
+++ b/Lib/unittest/test/test_skipping.py
@@ -460,5 +460,71 @@ class Test_TestSkipping(unittest.TestCase):
self.assertIs(suite.run(result), result)
self.assertEqual(result.skipped, [(test, "")])
+ def test_debug_skipping(self):
+ class Foo(unittest.TestCase):
+ def setUp(self):
+ events.append("setUp")
+ def tearDown(self):
+ events.append("tearDown")
+ def test1(self):
+ self.skipTest('skipping exception')
+ events.append("test1")
+ @unittest.skip("skipping decorator")
+ def test2(self):
+ events.append("test2")
+
+ events = []
+ test = Foo("test1")
+ with self.assertRaises(unittest.SkipTest) as cm:
+ test.debug()
+ self.assertIn("skipping exception", str(cm.exception))
+ self.assertEqual(events, ["setUp"])
+
+ events = []
+ test = Foo("test2")
+ with self.assertRaises(unittest.SkipTest) as cm:
+ test.debug()
+ self.assertIn("skipping decorator", str(cm.exception))
+ self.assertEqual(events, [])
+
+ def test_debug_skipping_class(self):
+ @unittest.skip("testing")
+ class Foo(unittest.TestCase):
+ def setUp(self):
+ events.append("setUp")
+ def tearDown(self):
+ events.append("tearDown")
+ def test(self):
+ events.append("test")
+
+ events = []
+ test = Foo("test")
+ with self.assertRaises(unittest.SkipTest) as cm:
+ test.debug()
+ self.assertIn("testing", str(cm.exception))
+ self.assertEqual(events, [])
+
+ def test_debug_skipping_subtests(self):
+ class Foo(unittest.TestCase):
+ def setUp(self):
+ events.append("setUp")
+ def tearDown(self):
+ events.append("tearDown")
+ def test(self):
+ with self.subTest(a=1):
+ events.append('subtest')
+ self.skipTest("skip subtest")
+ events.append('end subtest')
+ events.append('end test')
+
+ events = []
+ result = LoggingResult(events)
+ test = Foo("test")
+ with self.assertRaises(unittest.SkipTest) as cm:
+ test.debug()
+ self.assertIn("skip subtest", str(cm.exception))
+ self.assertEqual(events, ['setUp', 'subtest'])
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2021-09-18-13-14-57.bpo-36674.a2k5Zb.rst b/Misc/NEWS.d/next/Library/2021-09-18-13-14-57.bpo-36674.a2k5Zb.rst
new file mode 100644
index 0000000000..bc8c9247b0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-09-18-13-14-57.bpo-36674.a2k5Zb.rst
@@ -0,0 +1,2 @@
+:meth:`unittest.TestCase.debug` raises now a :class:`unittest.SkipTest` if
+the class or the test method are decorated with the skipping decorator.