Merge pull request #2225 from mbyt/allow_skipping_unittests_with_pdb_active
Allow to skip unittests if --pdb active
This commit is contained in:
commit
3d9c5cf19f
|
@ -1,16 +1,23 @@
|
||||||
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.
|
||||||
|
|
||||||
* Ignore exceptions raised from descriptors (e.g. properties) during Python test collection (`#2234`_).
|
* Ignore exceptions raised from descriptors (e.g. properties) during Python test collection (`#2234`_).
|
||||||
Thanks to `@bluetech`_.
|
Thanks to `@bluetech`_.
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
* Replace ``raise StopIteration`` usages in the code by simple ``returns`` to finish generators, in accordance to `PEP-479`_ (`#2160`_).
|
* Replace ``raise StopIteration`` usages in the code by simple ``returns`` to finish generators, in accordance to `PEP-479`_ (`#2160`_).
|
||||||
Thanks `@tgoodlet`_ for the report and `@nicoddemus`_ for the PR.
|
Thanks `@tgoodlet`_ for the report and `@nicoddemus`_ for the PR.
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
* Skipping plugin now also works with test items generated by custom collectors (`#2231`_).
|
* Skipping plugin now also works with test items generated by custom collectors (`#2231`_).
|
||||||
Thanks to `@vidartf`_.
|
Thanks to `@vidartf`_.
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
* Conditionless ``xfail`` markers no longer rely on the underlying test item
|
* Conditionless ``xfail`` markers no longer rely on the underlying test item
|
||||||
being an instance of ``PyobjMixin``, and can therefore apply to tests not
|
being an instance of ``PyobjMixin``, and can therefore apply to tests not
|
||||||
|
@ -19,18 +26,17 @@
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
.. _@bluetech: https://github.com/bluetech
|
||||||
|
.. _@gst: https://github.com/gst
|
||||||
|
.. _@vidartf: https://github.com/vidartf
|
||||||
|
|
||||||
|
.. _#2137: https://github.com/pytest-dev/pytest/issues/2137
|
||||||
|
.. _#2160: https://github.com/pytest-dev/pytest/issues/2160
|
||||||
|
.. _#2231: https://github.com/pytest-dev/pytest/issues/2231
|
||||||
.. _#2234: https://github.com/pytest-dev/pytest/issues/2234
|
.. _#2234: https://github.com/pytest-dev/pytest/issues/2234
|
||||||
|
|
||||||
.. _@bluetech: https://github.com/bluetech
|
|
||||||
|
|
||||||
.. _#2160: https://github.com/pytest-dev/pytest/issues/2160
|
|
||||||
|
|
||||||
.. _PEP-479: https://www.python.org/dev/peps/pep-0479/
|
.. _PEP-479: https://www.python.org/dev/peps/pep-0479/
|
||||||
|
|
||||||
.. _#2231: https://github.com/pytest-dev/pytest/issues/2231
|
|
||||||
|
|
||||||
.. _@vidartf: https://github.com/vidartf
|
|
||||||
|
|
||||||
|
|
||||||
3.0.6 (2017-01-22)
|
3.0.6 (2017-01-22)
|
||||||
==================
|
==================
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
@ -152,14 +151,33 @@ class TestCaseFunction(pytest.Function):
|
||||||
def stopTest(self, testcase):
|
def stopTest(self, testcase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _handle_skip(self):
|
||||||
|
# implements the skipping machinery (see #2137)
|
||||||
|
# analog to pythons Lib/unittest/case.py:run
|
||||||
|
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: # PY3, unittest2 on PY2
|
||||||
|
self._testcase._addSkip(self, self._testcase, skip_why)
|
||||||
|
except TypeError: # PY2
|
||||||
|
if sys.version_info[0] != 2:
|
||||||
|
raise
|
||||||
|
self._testcase._addSkip(self, skip_why)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def runtest(self):
|
def runtest(self):
|
||||||
if self.config.pluginmanager.get_plugin("pdbinvoke") is None:
|
if self.config.pluginmanager.get_plugin("pdbinvoke") is None:
|
||||||
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)
|
||||||
|
if self._handle_skip():
|
||||||
|
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(
|
||||||
|
|
|
@ -106,6 +106,21 @@ 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):
|
||||||
|
"""Test for issue #2137"""
|
||||||
|
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():
|
||||||
|
|
Loading…
Reference in New Issue