123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530 |
- import unittest
- from unittest.test.support import LoggingResult
- class Test_TestSkipping(unittest.TestCase):
- def test_skipping(self):
- class Foo(unittest.TestCase):
- def defaultTestResult(self):
- return LoggingResult(events)
- def test_skip_me(self):
- self.skipTest("skip")
- events = []
- result = LoggingResult(events)
- test = Foo("test_skip_me")
- self.assertIs(test.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "skip")])
- events = []
- result = test.run()
- self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
- 'stopTest', 'stopTestRun'])
- self.assertEqual(result.skipped, [(test, "skip")])
- self.assertEqual(result.testsRun, 1)
- # Try letting setUp skip the test now.
- class Foo(unittest.TestCase):
- def defaultTestResult(self):
- return LoggingResult(events)
- def setUp(self):
- self.skipTest("testing")
- def test_nothing(self): pass
- events = []
- result = LoggingResult(events)
- test = Foo("test_nothing")
- self.assertIs(test.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "testing")])
- self.assertEqual(result.testsRun, 1)
- events = []
- result = test.run()
- self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
- 'stopTest', 'stopTestRun'])
- self.assertEqual(result.skipped, [(test, "testing")])
- self.assertEqual(result.testsRun, 1)
- def test_skipping_subtests(self):
- class Foo(unittest.TestCase):
- def defaultTestResult(self):
- return LoggingResult(events)
- 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")
- self.assertIs(test.run(result), 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"))
- events = []
- result = test.run()
- self.assertEqual(events,
- ['startTestRun', 'startTest', 'addSkip', 'addSkip',
- 'addSkip', 'stopTest', 'stopTestRun'])
- self.assertEqual([msg for subtest, msg in result.skipped],
- ['skip 1', 'skip 2', '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):
- def defaultTestResult(self):
- return LoggingResult(events)
- @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)
- self.assertIs(suite.run(result), 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())
- events = []
- result = test_do_skip.run()
- self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
- 'stopTest', 'stopTestRun'])
- self.assertEqual(result.skipped, [(test_do_skip, "testing")])
- events = []
- result = test_dont_skip.run()
- self.assertEqual(events, ['startTestRun', 'startTest', 'addSuccess',
- 'stopTest', 'stopTestRun'])
- self.assertEqual(result.skipped, [])
- def test_skip_class(self):
- @unittest.skip("testing")
- class Foo(unittest.TestCase):
- def defaultTestResult(self):
- return LoggingResult(events)
- def test_1(self):
- record.append(1)
- events = []
- record = []
- result = LoggingResult(events)
- test = Foo("test_1")
- suite = unittest.TestSuite([test])
- self.assertIs(suite.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "testing")])
- self.assertEqual(record, [])
- events = []
- result = test.run()
- self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
- 'stopTest', 'stopTestRun'])
- 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])
- self.assertIs(suite.run(result), result)
- self.assertEqual(result.skipped, [(test, "testing")])
- self.assertEqual(record, [])
- def test_skip_in_setup(self):
- class Foo(unittest.TestCase):
- def setUp(self):
- self.skipTest("skip")
- def test_skip_me(self):
- self.fail("shouldn't come here")
- events = []
- result = LoggingResult(events)
- test = Foo("test_skip_me")
- self.assertIs(test.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "skip")])
- def test_skip_in_cleanup(self):
- class Foo(unittest.TestCase):
- def test_skip_me(self):
- pass
- def tearDown(self):
- self.skipTest("skip")
- events = []
- result = LoggingResult(events)
- test = Foo("test_skip_me")
- self.assertIs(test.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "skip")])
- def test_failure_and_skip_in_cleanup(self):
- class Foo(unittest.TestCase):
- def test_skip_me(self):
- self.fail("fail")
- def tearDown(self):
- self.skipTest("skip")
- events = []
- result = LoggingResult(events)
- test = Foo("test_skip_me")
- self.assertIs(test.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'addFailure', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "skip")])
- def test_skipping_and_fail_in_cleanup(self):
- class Foo(unittest.TestCase):
- def test_skip_me(self):
- self.skipTest("skip")
- def tearDown(self):
- self.fail("fail")
- events = []
- result = LoggingResult(events)
- test = Foo("test_skip_me")
- self.assertIs(test.run(result), result)
- self.assertEqual(events, ['startTest', 'addSkip', 'addFailure', 'stopTest'])
- self.assertEqual(result.skipped, [(test, "skip")])
- 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")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addExpectedFailure', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertEqual(result.expectedFailures[0][0], test)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertTrue(result.wasSuccessful())
- def test_expected_failure_with_wrapped_class(self):
- @unittest.expectedFailure
- class Foo(unittest.TestCase):
- def test_1(self):
- self.assertTrue(False)
- events = []
- result = LoggingResult(events)
- test = Foo("test_1")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addExpectedFailure', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertEqual(result.expectedFailures[0][0], test)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertTrue(result.wasSuccessful())
- def test_expected_failure_with_wrapped_subclass(self):
- class Foo(unittest.TestCase):
- def test_1(self):
- self.assertTrue(False)
- @unittest.expectedFailure
- class Bar(Foo):
- pass
- events = []
- result = LoggingResult(events)
- test = Bar("test_1")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addExpectedFailure', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertEqual(result.expectedFailures[0][0], test)
- self.assertFalse(result.unexpectedSuccesses)
- 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")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addSubTestSuccess',
- 'addExpectedFailure', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertEqual(len(result.expectedFailures), 1)
- self.assertIs(result.expectedFailures[0][0], test)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertTrue(result.wasSuccessful())
- def test_expected_failure_and_fail_in_cleanup(self):
- class Foo(unittest.TestCase):
- @unittest.expectedFailure
- def test_die(self):
- self.fail("help me!")
- def tearDown(self):
- self.fail("bad tearDown")
- events = []
- result = LoggingResult(events)
- test = Foo("test_die")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addFailure', 'stopTest'])
- self.assertEqual(len(result.failures), 1)
- self.assertIn('AssertionError: bad tearDown', result.failures[0][1])
- self.assertFalse(result.expectedFailures)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertFalse(result.wasSuccessful())
- def test_expected_failure_and_skip_in_cleanup(self):
- class Foo(unittest.TestCase):
- @unittest.expectedFailure
- def test_die(self):
- self.fail("help me!")
- def tearDown(self):
- self.skipTest("skip")
- events = []
- result = LoggingResult(events)
- test = Foo("test_die")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addSkip', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertFalse(result.expectedFailures)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertEqual(result.skipped, [(test, "skip")])
- 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")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addUnexpectedSuccess', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertFalse(result.expectedFailures)
- 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")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest',
- 'addSubTestSuccess', 'addSubTestSuccess',
- 'addUnexpectedSuccess', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertFalse(result.expectedFailures)
- self.assertEqual(result.unexpectedSuccesses, [test])
- self.assertFalse(result.wasSuccessful())
- def test_unexpected_success_and_fail_in_cleanup(self):
- class Foo(unittest.TestCase):
- @unittest.expectedFailure
- def test_die(self):
- pass
- def tearDown(self):
- self.fail("bad tearDown")
- events = []
- result = LoggingResult(events)
- test = Foo("test_die")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addFailure', 'stopTest'])
- self.assertEqual(len(result.failures), 1)
- self.assertIn('AssertionError: bad tearDown', result.failures[0][1])
- self.assertFalse(result.expectedFailures)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertFalse(result.wasSuccessful())
- def test_unexpected_success_and_skip_in_cleanup(self):
- class Foo(unittest.TestCase):
- @unittest.expectedFailure
- def test_die(self):
- pass
- def tearDown(self):
- self.skipTest("skip")
- events = []
- result = LoggingResult(events)
- test = Foo("test_die")
- self.assertIs(test.run(result), result)
- self.assertEqual(events,
- ['startTest', 'addSkip', 'stopTest'])
- self.assertFalse(result.failures)
- self.assertFalse(result.expectedFailures)
- self.assertFalse(result.unexpectedSuccesses)
- self.assertEqual(result.skipped, [(test, "skip")])
- self.assertTrue(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])
- self.assertIs(suite.run(result), 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])
- self.assertIs(suite.run(result), result)
- self.assertEqual(result.skipped, [(test, "testing")])
- def test_skip_without_reason(self):
- class Foo(unittest.TestCase):
- @unittest.skip
- def test_1(self):
- pass
- result = unittest.TestResult()
- test = Foo("test_1")
- suite = unittest.TestSuite([test])
- 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()
|