Skip to content

Commit 82a5da2

Browse files
author
Michael Foord
committed
Issue 8302. SkipTest exception is setUpClass or setUpModule is now reported as a skip rather than an error.
1 parent c22011b commit 82a5da2

1 file changed

Lines changed: 23 additions & 21 deletions

File tree

Lib/unittest/suite.py

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,12 @@ def _handleClassSetUp(self, test, result):
130130
if setUpClass is not None:
131131
try:
132132
setUpClass()
133-
except:
133+
except Exception as e:
134134
currentClass._classSetupFailed = True
135-
self._addClassSetUpError(result, currentClass)
135+
className = util.strclass(currentClass)
136+
errorName = 'classSetUp (%s)' % className
137+
self._addClassOrModuleLevelException(result, e, errorName)
138+
136139

137140
def _get_previous_module(self, result):
138141
previousModule = None
@@ -150,7 +153,6 @@ def _handleModuleFixture(self, test, result):
150153

151154
self._handleModuleTearDown(result)
152155

153-
154156
result._moduleSetUpFailed = False
155157
try:
156158
module = sys.modules[currentModule]
@@ -160,10 +162,18 @@ def _handleModuleFixture(self, test, result):
160162
if setUpModule is not None:
161163
try:
162164
setUpModule()
163-
except:
165+
except Exception, e:
164166
result._moduleSetUpFailed = True
165-
error = _ErrorHolder('setUpModule (%s)' % currentModule)
166-
result.addError(error, sys.exc_info())
167+
errorName = 'setUpModule (%s)' % currentModule
168+
self._addClassOrModuleLevelException(result, e, errorName)
169+
170+
def _addClassOrModuleLevelException(self, result, exception, errorName):
171+
error = _ErrorHolder(errorName)
172+
addSkip = getattr(result, 'addSkip', None)
173+
if addSkip is not None and isinstance(exception, case.SkipTest):
174+
addSkip(error, str(exception))
175+
else:
176+
result.addError(error, sys.exc_info())
167177

168178
def _handleModuleTearDown(self, result):
169179
previousModule = self._get_previous_module(result)
@@ -181,9 +191,9 @@ def _handleModuleTearDown(self, result):
181191
if tearDownModule is not None:
182192
try:
183193
tearDownModule()
184-
except:
185-
error = _ErrorHolder('tearDownModule (%s)' % previousModule)
186-
result.addError(error, sys.exc_info())
194+
except Exception as e:
195+
errorName = 'tearDownModule (%s)' % previousModule
196+
self._addClassOrModuleLevelException(result, e, errorName)
187197

188198
def _tearDownPreviousClass(self, test, result):
189199
previousClass = getattr(result, '_previousTestClass', None)
@@ -201,18 +211,10 @@ def _tearDownPreviousClass(self, test, result):
201211
if tearDownClass is not None:
202212
try:
203213
tearDownClass()
204-
except:
205-
self._addClassTearDownError(result)
206-
207-
def _addClassTearDownError(self, result):
208-
className = util.strclass(result._previousTestClass)
209-
error = _ErrorHolder('classTearDown (%s)' % className)
210-
result.addError(error, sys.exc_info())
211-
212-
def _addClassSetUpError(self, result, klass):
213-
className = util.strclass(klass)
214-
error = _ErrorHolder('classSetUp (%s)' % className)
215-
result.addError(error, sys.exc_info())
214+
except Exception, e:
215+
className = util.strclass(previousClass)
216+
errorName = 'classTearDown (%s)' % className
217+
self._addClassOrModuleLevelException(result, e, errorName)
216218

217219

218220
class _ErrorHolder(object):

0 commit comments

Comments
 (0)