diff options
-rw-r--r-- | Lib/unittest/suite.py | 43 | ||||
-rw-r--r-- | Lib/unittest/test/test_case.py | 4 | ||||
-rw-r--r-- | Lib/unittest/test/test_setups.py | 47 |
3 files changed, 72 insertions, 22 deletions
diff --git a/Lib/unittest/suite.py b/Lib/unittest/suite.py index a723852..0072f20 100644 --- a/Lib/unittest/suite.py +++ b/Lib/unittest/suite.py @@ -127,9 +127,11 @@ class TestSuite(BaseTestSuite): if setUpClass is not None: try: setUpClass() - except: + except Exception as e: currentClass._classSetupFailed = True - self._addClassSetUpError(result, currentClass) + className = util.strclass(currentClass) + errorName = 'setUpClass (%s)' % className + self._addClassOrModuleLevelException(result, e, errorName) def _get_previous_module(self, result): previousModule = None @@ -157,10 +159,18 @@ class TestSuite(BaseTestSuite): if setUpModule is not None: try: setUpModule() - except: + except Exception as e: result._moduleSetUpFailed = True - error = _ErrorHolder('setUpModule (%s)' % currentModule) - result.addError(error, sys.exc_info()) + errorName = 'setUpModule (%s)' % currentModule + self._addClassOrModuleLevelException(result, e, errorName) + + def _addClassOrModuleLevelException(self, result, exception, errorName): + error = _ErrorHolder(errorName) + addSkip = getattr(result, 'addSkip', None) + if addSkip is not None and isinstance(exception, case.SkipTest): + addSkip(error, str(exception)) + else: + result.addError(error, sys.exc_info()) def _handleModuleTearDown(self, result): previousModule = self._get_previous_module(result) @@ -178,9 +188,9 @@ class TestSuite(BaseTestSuite): if tearDownModule is not None: try: tearDownModule() - except: - error = _ErrorHolder('tearDownModule (%s)' % previousModule) - result.addError(error, sys.exc_info()) + except Exception as e: + errorName = 'tearDownModule (%s)' % previousModule + self._addClassOrModuleLevelException(result, e, errorName) def _tearDownPreviousClass(self, test, result): previousClass = getattr(result, '_previousTestClass', None) @@ -198,18 +208,11 @@ class TestSuite(BaseTestSuite): if tearDownClass is not None: try: tearDownClass() - except: - self._addClassTearDownError(result) - - def _addClassTearDownError(self, result): - className = util.strclass(result._previousTestClass) - error = _ErrorHolder('classTearDown (%s)' % className) - result.addError(error, sys.exc_info()) - - def _addClassSetUpError(self, result, klass): - className = util.strclass(klass) - error = _ErrorHolder('classSetUp (%s)' % className) - result.addError(error, sys.exc_info()) + except Exception as e: + className = util.strclass(previousClass) + errorName = 'tearDownClass (%s)' % className + self._addClassOrModuleLevelException(result, e, errorName) + class _ErrorHolder(object): diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py index b7dfa68..00883c9 100644 --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -641,6 +641,10 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing): message = self._truncateMessage('foo', 'bar') self.assertEqual(message, 'foobar') + self.maxDiff = 4 + message = self._truncateMessage('foo', 'bar') + self.assertEqual(message, 'foobar') + def testAssertDictEqualTruncates(self): test = unittest.TestCase('assertEqual') def truncate(msg, diff): diff --git a/Lib/unittest/test/test_setups.py b/Lib/unittest/test/test_setups.py index 0d1e8bc..3f2994b 100644 --- a/Lib/unittest/test/test_setups.py +++ b/Lib/unittest/test/test_setups.py @@ -111,7 +111,7 @@ class TestSetups(unittest.TestCase): self.assertEqual(len(result.errors), 1) error, _ = result.errors[0] self.assertEqual(str(error), - 'classSetUp (%s.BrokenTest)' % __name__) + 'setUpClass (%s.BrokenTest)' % __name__) def test_error_in_teardown_class(self): class Test(unittest.TestCase): @@ -144,7 +144,7 @@ class TestSetups(unittest.TestCase): error, _ = result.errors[0] self.assertEqual(str(error), - 'classTearDown (%s.Test)' % __name__) + 'tearDownClass (%s.Test)' % __name__) def test_class_not_torndown_when_setup_fails(self): class Test(unittest.TestCase): @@ -398,3 +398,46 @@ class TestSetups(unittest.TestCase): self.assertEqual(len(result.errors), 1) error, _ = result.errors[0] self.assertEqual(str(error), 'tearDownModule (Module)') + + def test_skiptest_in_setupclass(self): + class Test(unittest.TestCase): + @classmethod + def setUpClass(cls): + raise unittest.SkipTest('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + self.assertEqual(result.testsRun, 0) + self.assertEqual(len(result.errors), 0) + self.assertEqual(len(result.skipped), 1) + skipped = result.skipped[0][0] + self.assertEqual(str(skipped), 'setUpClass (%s.Test)' % __name__) + + def test_skiptest_in_setupmodule(self): + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + + class Module(object): + @staticmethod + def setUpModule(): + raise unittest.SkipTest('foo') + + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(result.testsRun, 0) + self.assertEqual(len(result.errors), 0) + self.assertEqual(len(result.skipped), 1) + skipped = result.skipped[0][0] + self.assertEqual(str(skipped), 'setUpModule (Module)') + + +if __name__ == '__main__': + unittest.main() |