mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			227 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			227 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import unittest
 | 
						|
 | 
						|
from .support import LoggingResult
 | 
						|
 | 
						|
 | 
						|
class Test_TestSkipping(unittest.TestCase):
 | 
						|
 | 
						|
    def test_skipping(self):
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            def test_skip_me(self):
 | 
						|
                self.skipTest("skip")
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_skip_me")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
 | 
						|
        self.assertEqual(result.skipped, [(test, "skip")])
 | 
						|
 | 
						|
        # Try letting setUp skip the test now.
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            def setUp(self):
 | 
						|
                self.skipTest("testing")
 | 
						|
            def test_nothing(self): pass
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_nothing")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
 | 
						|
        self.assertEqual(result.skipped, [(test, "testing")])
 | 
						|
        self.assertEqual(result.testsRun, 1)
 | 
						|
 | 
						|
    def test_skipping_subtests(self):
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            def test_skip_me(self):
 | 
						|
                with self.subTest(a=1):
 | 
						|
                    with self.subTest(b=2):
 | 
						|
                        self.skipTest("skip 1")
 | 
						|
                    self.skipTest("skip 2")
 | 
						|
                self.skipTest("skip 3")
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_skip_me")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events, ['startTest', 'addSkip', 'addSkip',
 | 
						|
                                  'addSkip', 'stopTest'])
 | 
						|
        self.assertEqual(len(result.skipped), 3)
 | 
						|
        subtest, msg = result.skipped[0]
 | 
						|
        self.assertEqual(msg, "skip 1")
 | 
						|
        self.assertIsInstance(subtest, unittest.TestCase)
 | 
						|
        self.assertIsNot(subtest, test)
 | 
						|
        subtest, msg = result.skipped[1]
 | 
						|
        self.assertEqual(msg, "skip 2")
 | 
						|
        self.assertIsInstance(subtest, unittest.TestCase)
 | 
						|
        self.assertIsNot(subtest, test)
 | 
						|
        self.assertEqual(result.skipped[2], (test, "skip 3"))
 | 
						|
 | 
						|
    def test_skipping_decorators(self):
 | 
						|
        op_table = ((unittest.skipUnless, False, True),
 | 
						|
                    (unittest.skipIf, True, False))
 | 
						|
        for deco, do_skip, dont_skip in op_table:
 | 
						|
            class Foo(unittest.TestCase):
 | 
						|
                @deco(do_skip, "testing")
 | 
						|
                def test_skip(self): pass
 | 
						|
 | 
						|
                @deco(dont_skip, "testing")
 | 
						|
                def test_dont_skip(self): pass
 | 
						|
            test_do_skip = Foo("test_skip")
 | 
						|
            test_dont_skip = Foo("test_dont_skip")
 | 
						|
            suite = unittest.TestSuite([test_do_skip, test_dont_skip])
 | 
						|
            events = []
 | 
						|
            result = LoggingResult(events)
 | 
						|
            suite.run(result)
 | 
						|
            self.assertEqual(len(result.skipped), 1)
 | 
						|
            expected = ['startTest', 'addSkip', 'stopTest',
 | 
						|
                        'startTest', 'addSuccess', 'stopTest']
 | 
						|
            self.assertEqual(events, expected)
 | 
						|
            self.assertEqual(result.testsRun, 2)
 | 
						|
            self.assertEqual(result.skipped, [(test_do_skip, "testing")])
 | 
						|
            self.assertTrue(result.wasSuccessful())
 | 
						|
 | 
						|
    def test_skip_class(self):
 | 
						|
        @unittest.skip("testing")
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            def test_1(self):
 | 
						|
                record.append(1)
 | 
						|
        record = []
 | 
						|
        result = unittest.TestResult()
 | 
						|
        test = Foo("test_1")
 | 
						|
        suite = unittest.TestSuite([test])
 | 
						|
        suite.run(result)
 | 
						|
        self.assertEqual(result.skipped, [(test, "testing")])
 | 
						|
        self.assertEqual(record, [])
 | 
						|
 | 
						|
    def test_skip_non_unittest_class(self):
 | 
						|
        @unittest.skip("testing")
 | 
						|
        class Mixin:
 | 
						|
            def test_1(self):
 | 
						|
                record.append(1)
 | 
						|
        class Foo(Mixin, unittest.TestCase):
 | 
						|
            pass
 | 
						|
        record = []
 | 
						|
        result = unittest.TestResult()
 | 
						|
        test = Foo("test_1")
 | 
						|
        suite = unittest.TestSuite([test])
 | 
						|
        suite.run(result)
 | 
						|
        self.assertEqual(result.skipped, [(test, "testing")])
 | 
						|
        self.assertEqual(record, [])
 | 
						|
 | 
						|
    def test_expected_failure(self):
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            @unittest.expectedFailure
 | 
						|
            def test_die(self):
 | 
						|
                self.fail("help me!")
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_die")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events,
 | 
						|
                         ['startTest', 'addExpectedFailure', 'stopTest'])
 | 
						|
        self.assertEqual(result.expectedFailures[0][0], test)
 | 
						|
        self.assertTrue(result.wasSuccessful())
 | 
						|
 | 
						|
    def test_expected_failure_subtests(self):
 | 
						|
        # A failure in any subtest counts as the expected failure of the
 | 
						|
        # whole test.
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            @unittest.expectedFailure
 | 
						|
            def test_die(self):
 | 
						|
                with self.subTest():
 | 
						|
                    # This one succeeds
 | 
						|
                    pass
 | 
						|
                with self.subTest():
 | 
						|
                    self.fail("help me!")
 | 
						|
                with self.subTest():
 | 
						|
                    # This one doesn't get executed
 | 
						|
                    self.fail("shouldn't come here")
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_die")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events,
 | 
						|
                         ['startTest', 'addSubTestSuccess',
 | 
						|
                          'addExpectedFailure', 'stopTest'])
 | 
						|
        self.assertEqual(len(result.expectedFailures), 1)
 | 
						|
        self.assertIs(result.expectedFailures[0][0], test)
 | 
						|
        self.assertTrue(result.wasSuccessful())
 | 
						|
 | 
						|
    def test_unexpected_success(self):
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            @unittest.expectedFailure
 | 
						|
            def test_die(self):
 | 
						|
                pass
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_die")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events,
 | 
						|
                         ['startTest', 'addUnexpectedSuccess', 'stopTest'])
 | 
						|
        self.assertFalse(result.failures)
 | 
						|
        self.assertEqual(result.unexpectedSuccesses, [test])
 | 
						|
        self.assertFalse(result.wasSuccessful())
 | 
						|
 | 
						|
    def test_unexpected_success_subtests(self):
 | 
						|
        # Success in all subtests counts as the unexpected success of
 | 
						|
        # the whole test.
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            @unittest.expectedFailure
 | 
						|
            def test_die(self):
 | 
						|
                with self.subTest():
 | 
						|
                    # This one succeeds
 | 
						|
                    pass
 | 
						|
                with self.subTest():
 | 
						|
                    # So does this one
 | 
						|
                    pass
 | 
						|
        events = []
 | 
						|
        result = LoggingResult(events)
 | 
						|
        test = Foo("test_die")
 | 
						|
        test.run(result)
 | 
						|
        self.assertEqual(events,
 | 
						|
                         ['startTest',
 | 
						|
                          'addSubTestSuccess', 'addSubTestSuccess',
 | 
						|
                          'addUnexpectedSuccess', 'stopTest'])
 | 
						|
        self.assertFalse(result.failures)
 | 
						|
        self.assertEqual(result.unexpectedSuccesses, [test])
 | 
						|
        self.assertFalse(result.wasSuccessful())
 | 
						|
 | 
						|
    def test_skip_doesnt_run_setup(self):
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            wasSetUp = False
 | 
						|
            wasTornDown = False
 | 
						|
            def setUp(self):
 | 
						|
                Foo.wasSetUp = True
 | 
						|
            def tornDown(self):
 | 
						|
                Foo.wasTornDown = True
 | 
						|
            @unittest.skip('testing')
 | 
						|
            def test_1(self):
 | 
						|
                pass
 | 
						|
 | 
						|
        result = unittest.TestResult()
 | 
						|
        test = Foo("test_1")
 | 
						|
        suite = unittest.TestSuite([test])
 | 
						|
        suite.run(result)
 | 
						|
        self.assertEqual(result.skipped, [(test, "testing")])
 | 
						|
        self.assertFalse(Foo.wasSetUp)
 | 
						|
        self.assertFalse(Foo.wasTornDown)
 | 
						|
 | 
						|
    def test_decorated_skip(self):
 | 
						|
        def decorator(func):
 | 
						|
            def inner(*a):
 | 
						|
                return func(*a)
 | 
						|
            return inner
 | 
						|
 | 
						|
        class Foo(unittest.TestCase):
 | 
						|
            @decorator
 | 
						|
            @unittest.skip('testing')
 | 
						|
            def test_1(self):
 | 
						|
                pass
 | 
						|
 | 
						|
        result = unittest.TestResult()
 | 
						|
        test = Foo("test_1")
 | 
						|
        suite = unittest.TestSuite([test])
 | 
						|
        suite.run(result)
 | 
						|
        self.assertEqual(result.skipped, [(test, "testing")])
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    unittest.main()
 |