[py-svn] pytest commit 3b67bd77f30b: fix issue9 wrong XPass with failing setup/teardown function of xfail marked test
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Mon Dec 6 18:24:17 CET 2010
# HG changeset patch -- Bitbucket.org
# Project pytest
# URL http://bitbucket.org/hpk42/pytest/overview
# User holger krekel <holger at merlinux.eu>
# Date 1291656047 -3600
# Node ID 3b67bd77f30b91a56847d5a565f80e74979443ee
# Parent 1c3eb86502b30a52e8adf798967b7d547edd8f43
fix issue9 wrong XPass with failing setup/teardown function of xfail marked test
now when setup or teardown of a test item/function fails and the test
is marked "xfail" it will show up as an xfail-ed test.
--- a/_pytest/skipping.py
+++ b/_pytest/skipping.py
@@ -97,19 +97,19 @@ def pytest_runtest_makereport(__multical
rep.keywords['xfail'] = "reason: " + call.excinfo.value.msg
rep.outcome = "skipped"
return rep
- if call.when == "call":
- rep = __multicall__.execute()
- evalxfail = getattr(item, '_evalxfail')
- if not item.config.getvalue("runxfail") and evalxfail.istrue():
- if call.excinfo:
- rep.outcome = "skipped"
- else:
- rep.outcome = "failed"
+ rep = __multicall__.execute()
+ evalxfail = item._evalxfail
+ if not item.config.option.runxfail and evalxfail.istrue():
+ if call.excinfo:
+ rep.outcome = "skipped"
rep.keywords['xfail'] = evalxfail.getexplanation()
- else:
- if 'xfail' in rep.keywords:
- del rep.keywords['xfail']
- return rep
+ elif call.when == "call":
+ rep.outcome = "failed"
+ rep.keywords['xfail'] = evalxfail.getexplanation()
+ else:
+ if 'xfail' in rep.keywords:
+ del rep.keywords['xfail']
+ return rep
# called by terminalreporter progress reporting
def pytest_report_teststatus(report):
--- a/testing/test_skipping.py
+++ b/testing/test_skipping.py
@@ -308,6 +308,37 @@ class TestXFail:
"*1 xfailed*",
])
+class TestXFailwithSetupTeardown:
+ def test_failing_setup_issue9(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ def setup_function(func):
+ assert 0
+
+ @pytest.mark.xfail
+ def test_func():
+ pass
+ """)
+ result = testdir.runpytest()
+ result.stdout.fnmatch_lines([
+ "*1 xfail*",
+ ])
+
+ def test_failing_teardown_issue9(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ def teardown_function(func):
+ assert 0
+
+ @pytest.mark.xfail
+ def test_func():
+ pass
+ """)
+ result = testdir.runpytest()
+ result.stdout.fnmatch_lines([
+ "*1 xfail*",
+ ])
+
class TestSkipif:
def test_skipif_conditional(self, testdir):
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,9 @@
Changes between 2.0.0 and 2.0.1.dev1
----------------------------------------------
+- fix issue9: direct setup/teardown functions for an xfail-marked
+ test will report as xfail if they fail (but reported as normal
+ passing setup/teardown).
- fix issue8: no logging errors at process exit
- refinements to "collecting" output on non-ttys
- refine internal plugin registration and --traceconfig output
More information about the pytest-commit
mailing list