fix teardown-ordering for parametrized setups/teardowns

This commit is contained in:
holger krekel 2012-10-22 12:16:54 +02:00
parent 036557ac18
commit f28f073c7c
5 changed files with 42 additions and 3 deletions

View File

@ -4,6 +4,8 @@ Changes between 2.3.1 and 2.3.2.dev
- fix issue205 - conftests in subdirs customizing
pytest_pycollect_makemodule now work properly
- fix teardown-ordering for parametrized setups
- fix exception message check of test_nose.py to pass on python33 as well
- fix issue206 - fix test_assertrewrite.py to work when a global

View File

@ -1,2 +1,2 @@
#
__version__ = '2.3.2.dev5'
__version__ = '2.3.2.dev6'

View File

@ -1531,7 +1531,7 @@ class FixtureManager:
item.session._setupstate._callfinalizers((name, param))
l = self._arg2finish.get(name)
if l is not None:
for fin in l:
for fin in reversed(l):
fin()
def parsefactories(self, node_or_obj, nodeid=None, unittest=False):

View File

@ -24,7 +24,7 @@ def main():
name='pytest',
description='py.test: simple powerful testing with Python',
long_description = long_description,
version='2.3.2.dev5',
version='2.3.2.dev6',
url='http://pytest.org',
license='MIT license',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],

View File

@ -2763,6 +2763,43 @@ class TestFixtureMarker:
reprec = testdir.inline_run("-v")
reprec.assertoutcome(passed=12+1)
def test_parametrized_fixture_teardown_order(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.fixture(params=[1,2], scope="class")
def param1(request):
return request.param
l = []
class TestClass:
@classmethod
@pytest.fixture(scope="class", autouse=True)
def setup1(self, request, param1):
l.append(1)
request.addfinalizer(self.teardown1)
@classmethod
def teardown1(self):
assert l.pop() == 1
@pytest.fixture(scope="class", autouse=True)
def setup2(self, request, param1):
l.append(2)
request.addfinalizer(self.teardown2)
@classmethod
def teardown2(self):
assert l.pop() == 2
def test(self):
pass
def test_finish():
assert not l
""")
result = testdir.runpytest("-v")
result.stdout.fnmatch_lines("""
*3 passed*
""")
assert "error" not in result.stdout.str()
def test_parametrize_separated_lifecycle(self, testdir):
testdir.makepyfile("""
import pytest