diff --git a/CHANGELOG b/CHANGELOG index d177cca6f..4189d4493 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Changes between 2.0.1 and 2.0.2 ---------------------------------------------- +- fix issue28 - setup_method and pytest_generate_tests work together + - fix issue24 - pytest_assertrepr_compare produces an in-line exception on python3 diff --git a/_pytest/python.py b/_pytest/python.py index c0c510670..c0e150e39 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -297,13 +297,8 @@ class Instance(PyCollectorMixin, pytest.Collector): class FunctionMixin(PyobjMixin): """ mixin for the code common to Function and Generator. """ - def setup(self): """ perform setup for this test function. """ - if inspect.ismethod(self.obj): - name = 'setup_method' - else: - name = 'setup_function' if hasattr(self, '_preservedparent'): obj = self._preservedparent elif isinstance(self.parent, Instance): @@ -311,6 +306,10 @@ class FunctionMixin(PyobjMixin): self.obj = self._getobj() else: obj = self.parent.obj + if inspect.ismethod(self.obj): + name = 'setup_method' + else: + name = 'setup_function' setup_func_or_method = getattr(obj, name, None) if setup_func_or_method is not None: setup_func_or_method(self.obj) diff --git a/pytest.py b/pytest.py index ebc989c11..fbd5b0d59 100644 --- a/pytest.py +++ b/pytest.py @@ -1,7 +1,7 @@ """ unit and functional testing with Python. """ -__version__ = '2.0.2.dev0' +__version__ = '2.0.2.dev1' __all__ = ['main'] from _pytest.core import main, UsageError, _preloadplugins diff --git a/setup.py b/setup.py index 2fd956ccd..d8e17a7a0 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ def main(): name='pytest', description='py.test: simple powerful testing with Python', long_description = long_description, - version='2.0.2.dev0', + version='2.0.2.dev1', url='http://pytest.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], diff --git a/testing/test_python.py b/testing/test_python.py index 6e0639fde..31a11d71f 100644 --- a/testing/test_python.py +++ b/testing/test_python.py @@ -1062,6 +1062,21 @@ class TestGenfuncFunctional: "*2 pass*", ]) + def test_issue28_setup_method_in_generate_tests(self, testdir): + p = testdir.makepyfile(""" + def pytest_generate_tests(metafunc): + metafunc.addcall({'arg1': 1}) + + class TestClass: + def test_method(self, arg1): + assert arg1 == self.val + def setup_method(self, func): + self.val = 1 + """) + result = testdir.runpytest(p) + result.stdout.fnmatch_lines([ + "*1 pass*", + ]) def test_conftest_funcargs_only_available_in_subdir(testdir): sub1 = testdir.mkpydir("sub1")