diff --git a/CHANGELOG b/CHANGELOG index 965089c85..67054d240 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Changes between 2.2.4 and 2.2.5.dev ----------------------------------- +- fix issue160: a failing setup of an xfail-marked tests should + be reported as xfail (not xpass) - fix issue128: show captured output when capsys/capfd are used - pluginmanager.register(...) now raises ValueError if the plugin has been already registered or the name is taken diff --git a/_pytest/skipping.py b/_pytest/skipping.py index fe7a523bd..176bfb4eb 100644 --- a/_pytest/skipping.py +++ b/_pytest/skipping.py @@ -110,6 +110,7 @@ class MarkEvaluator: return expl +@pytest.mark.tryfirst def pytest_runtest_setup(item): if not isinstance(item, pytest.Function): return diff --git a/testing/test_skipping.py b/testing/test_skipping.py index 3de87f65b..603046ad6 100644 --- a/testing/test_skipping.py +++ b/testing/test_skipping.py @@ -556,3 +556,19 @@ def test_default_markers(testdir): "*xfail(*conditions, reason=None, run=True)*expected failure*", ]) + +def test_xfail_test_setup_exception(testdir): + testdir.makeconftest(""" + def pytest_runtest_setup(): + 0 / 0 + """) + p = testdir.makepyfile(""" + import pytest + @pytest.mark.xfail + def test_func(): + assert 0 + """) + result = testdir.runpytest(p) + assert result.ret == 0 + assert 'xfailed' in result.stdout.str() + assert 'xpassed' not in result.stdout.str() diff --git a/tox.ini b/tox.ini index 407d5bc5d..60ea37c72 100644 --- a/tox.ini +++ b/tox.ini @@ -77,4 +77,4 @@ rsyncdirs=tox.ini pytest.py _pytest testing python_files=test_*.py *_test.py python_classes=Test Acceptance python_functions=test -pep8ignore = E401 +pep8ignore = E401 E225 E261 E128 E124