diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-03-23 22:25:03 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-03-23 22:25:03 (GMT) |
commit | 5254c04aeb6b14e280e52b82937183714da1a541 (patch) | |
tree | 21be44380704df586f24b6ce9f87b81aa5be4730 /Lib/test/test_unittest.py | |
parent | 87d98bcbad6c7bc461da2cbded05cb5a01fc9059 (diff) | |
download | cpython-5254c04aeb6b14e280e52b82937183714da1a541.zip cpython-5254c04aeb6b14e280e52b82937183714da1a541.tar.gz cpython-5254c04aeb6b14e280e52b82937183714da1a541.tar.bz2 |
Merged revisions 70555 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r70555 | benjamin.peterson | 2009-03-23 16:50:21 -0500 (Mon, 23 Mar 2009) | 4 lines
implement test skipping and expected failures
patch by myself #1034053
........
Diffstat (limited to 'Lib/test/test_unittest.py')
-rw-r--r-- | Lib/test/test_unittest.py | 130 |
1 files changed, 124 insertions, 6 deletions
diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py index 38ceb9a..74aff14 100644 --- a/Lib/test/test_unittest.py +++ b/Lib/test/test_unittest.py @@ -31,10 +31,27 @@ class LoggingResult(unittest.TestResult): self._events.append('addFailure') super().addFailure(*args) + def addSuccess(self, *args): + self._events.append('addSuccess') + super(LoggingResult, self).addSuccess(*args) + def addError(self, *args): self._events.append('addError') super().addError(*args) + def addSkip(self, *args): + self._events.append('addSkip') + super(LoggingResult, self).addSkip(*args) + + def addExpectedFailure(self, *args): + self._events.append('addExpectedFailure') + super(LoggingResult, self).addExpectedFailure(*args) + + def addUnexpectedSuccess(self, *args): + self._events.append('addUnexpectedSuccess') + super(LoggingResult, self).addUnexpectedSuccess(*args) + + class TestEquality(object): # Check for a valid __eq__ implementation def test_eq(self): @@ -72,6 +89,13 @@ class TestHashing(object): self.fail("Problem hashing %s and %s: %s" % (obj_1, obj_2, e)) +# List subclass we can add attributes to. +class MyClassSuite(list): + + def __init__(self, tests, klass): + super(MyClassSuite, self).__init__(tests) + + ################################################################ ### /Support code @@ -1233,7 +1257,7 @@ class Test_TestLoader(TestCase): tests = [Foo('test_1'), Foo('test_2')] loader = unittest.TestLoader() - loader.suiteClass = list + loader.classSuiteClass = MyClassSuite self.assertEqual(loader.loadTestsFromTestCase(Foo), tests) # It is implicit in the documentation for TestLoader.suiteClass that @@ -1246,7 +1270,7 @@ class Test_TestLoader(TestCase): def foo_bar(self): pass m.Foo = Foo - tests = [[Foo('test_1'), Foo('test_2')]] + tests = [unittest.ClassTestSuite([Foo('test_1'), Foo('test_2')], Foo)] loader = unittest.TestLoader() loader.suiteClass = list @@ -1265,7 +1289,7 @@ class Test_TestLoader(TestCase): tests = [Foo('test_1'), Foo('test_2')] loader = unittest.TestLoader() - loader.suiteClass = list + loader.classSuiteClass = MyClassSuite self.assertEqual(loader.loadTestsFromName('Foo', m), tests) # It is implicit in the documentation for TestLoader.suiteClass that @@ -1278,7 +1302,7 @@ class Test_TestLoader(TestCase): def foo_bar(self): pass m.Foo = Foo - tests = [[Foo('test_1'), Foo('test_2')]] + tests = [unittest.ClassTestSuite([Foo('test_1'), Foo('test_2')], Foo)] loader = unittest.TestLoader() loader.suiteClass = list @@ -2271,9 +2295,103 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): # Make run() find a result object on its own Foo('test').run() - expected = ['startTest', 'test', 'stopTest'] + expected = ['startTest', 'test', 'addSuccess', 'stopTest'] self.assertEqual(events, expected) + +class Test_TestSkipping(TestCase): + + def test_skipping(self): + class Foo(unittest.TestCase): + def test_skip_me(self): + self.skip("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.skip("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_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.ClassTestSuite([test_do_skip, test_dont_skip], Foo) + 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() + suite = unittest.ClassTestSuite([Foo("test_1")], Foo) + suite.run(result) + self.assertEqual(result.skipped, [(suite, "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.expected_failures[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.unexpected_successes, [test]) + self.assertTrue(result.wasSuccessful()) + + + class Test_Assertions(TestCase): def test_AlmostEqual(self): self.failUnlessAlmostEqual(1.00000001, 1.0) @@ -2338,7 +2456,7 @@ class Test_Assertions(TestCase): def test_main(): support.run_unittest(Test_TestCase, Test_TestLoader, Test_TestSuite, Test_TestResult, Test_FunctionTestCase, - Test_Assertions) + Test_TestSkipping, Test_Assertions) if __name__ == "__main__": test_main() |