Allow to skip unittests if --pdb active

closes #2137
This commit is contained in:
mbyt 2017-01-30 21:20:12 +01:00
parent 0931fe2c89
commit d1c725078a
3 changed files with 32 additions and 3 deletions

View File

@ -1,7 +1,8 @@
3.0.7 (unreleased) 3.0.7 (unreleased)
======================= =======================
* * Fix regression, pytest now skips unittest correctly if run with ``--pdb``
(`#2137`_). Thanks to `@gst`_ for the report and `@mbyt`_ for the PR.
* *
@ -9,6 +10,10 @@
* *
.. _@gst: https://github.com/gst
.. _#2137: https://github.com/pytest-dev/pytest/issues/2137
3.0.6 (2017-01-22) 3.0.6 (2017-01-22)
================== ==================

View File

@ -65,7 +65,6 @@ class UnitTestCase(pytest.Class):
yield TestCaseFunction('runTest', parent=self) yield TestCaseFunction('runTest', parent=self)
class TestCaseFunction(pytest.Function): class TestCaseFunction(pytest.Function):
_excinfo = None _excinfo = None
@ -157,9 +156,20 @@ class TestCaseFunction(pytest.Function):
self._testcase(result=self) self._testcase(result=self)
else: else:
# disables tearDown and cleanups for post mortem debugging (see #1890) # disables tearDown and cleanups for post mortem debugging (see #1890)
# but still implements the skipping machinery (see #2137)
testMethod = getattr(self._testcase, self._testcase._testMethodName)
if (getattr(self._testcase.__class__, "__unittest_skip__", False) or
getattr(testMethod, "__unittest_skip__", False)):
# If the class or method was skipped.
skip_why = (getattr(self._testcase.__class__, '__unittest_skip_why__', '')
or getattr(testMethod, '__unittest_skip_why__', ''))
try:
self._testcase._addSkip(self, self._testcase, skip_why)
except TypeError: # PY2
self._testcase._addSkip(self, skip_why)
return
self._testcase.debug() self._testcase.debug()
def _prunetraceback(self, excinfo): def _prunetraceback(self, excinfo):
pytest.Function._prunetraceback(self, excinfo) pytest.Function._prunetraceback(self, excinfo)
traceback = excinfo.traceback.filter( traceback = excinfo.traceback.filter(

View File

@ -106,6 +106,20 @@ class TestPDB:
assert 'debug.me' in rest assert 'debug.me' in rest
self.flush(child) self.flush(child)
def test_pdb_unittest_skip(self, testdir):
p1 = testdir.makepyfile("""
import unittest
@unittest.skipIf(True, 'Skipping also with pdb active')
class MyTestCase(unittest.TestCase):
def test_one(self):
assert 0
""")
child = testdir.spawn_pytest("-rs --pdb %s" % p1)
child.expect('Skipping also with pdb active')
child.expect('1 skipped in')
child.sendeof()
self.flush(child)
def test_pdb_interaction_capture(self, testdir): def test_pdb_interaction_capture(self, testdir):
p1 = testdir.makepyfile(""" p1 = testdir.makepyfile("""
def test_1(): def test_1():