Merge pull request #1605 from guyzmo/issue/1604

Fixed issue shadowing error when missing argument on teardown_method
This commit is contained in:
Ronny Pfannschmidt 2016-06-12 12:05:37 +02:00 committed by GitHub
commit 66e66f61e8
4 changed files with 40 additions and 1 deletions

View File

@ -91,3 +91,4 @@ Thomas Grainger
Tom Viner
Trevor Bekolay
Wouter van Ackooy
Bernard Pratz

View File

@ -6,7 +6,8 @@
* Text documents without any doctests no longer appear as "skipped".
Thanks `@graingert`_ for reporting and providing a full PR (`#1580`_).
*
* Fix internal error issue when ``method`` argument is missing for
``teardown_method()``. Fixes (`#1605`_).
*
@ -15,6 +16,7 @@
`@marscher`. Thanks `@nicoddemus` for his help.
.. _#1580: https://github.com/pytest-dev/pytest/issues/1580
.. _#1605: https://github.com/pytest-dev/pytest/issues/1605
.. _@graingert: https://github.com/graingert

View File

@ -392,7 +392,10 @@ class Node(object):
if self.config.option.fulltrace:
style="long"
else:
tb = _pytest._code.Traceback([excinfo.traceback[-1]])
self._prunetraceback(excinfo)
if len(excinfo.traceback) == 0:
excinfo.traceback = tb
tbfilter = False # prunetraceback already does it
if style == "auto":
style = "long"

View File

@ -228,6 +228,39 @@ class BaseFunctionalTests:
assert reps[5].nodeid.endswith("test_func")
assert reps[5].failed
def test_exact_teardown_issue1206(self, testdir):
rec = testdir.inline_runsource("""
import pytest
class TestClass:
def teardown_method(self):
pass
def test_method(self):
assert True
""")
reps = rec.getreports("pytest_runtest_logreport")
print (reps)
assert len(reps) == 3
#
assert reps[0].nodeid.endswith("test_method")
assert reps[0].passed
assert reps[0].when == 'setup'
#
assert reps[1].nodeid.endswith("test_method")
assert reps[1].passed
assert reps[1].when == 'call'
#
assert reps[2].nodeid.endswith("test_method")
assert reps[2].failed
assert reps[2].when == "teardown"
assert reps[2].longrepr.reprcrash.message in (
# python3 error
'TypeError: teardown_method() takes 1 positional argument but 2 were given',
# python2 error
'TypeError: teardown_method() takes exactly 1 argument (2 given)'
)
def test_failure_in_setup_function_ignores_custom_repr(self, testdir):
testdir.makepyfile(conftest="""
import pytest