From 0e3779b14f0f5d4201ff4411a28329f6e6a0f030 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Sun, 6 May 2012 23:03:16 +0200 Subject: [PATCH] strip bound wrappers of class setup/tardown, fixes #140 on python3 im_func is replaced by __func__ --- _pytest/python.py | 2 ++ testing/test_python.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/_pytest/python.py b/_pytest/python.py index 5289fe6f5..3f1924f44 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -311,12 +311,14 @@ class Class(PyCollectorMixin, pytest.Collector): setup_class = getattr(self.obj, 'setup_class', None) if setup_class is not None: setup_class = getattr(setup_class, 'im_func', setup_class) + setup_class = getattr(setup_class, '__func__', setup_class) setup_class(self.obj) def teardown(self): teardown_class = getattr(self.obj, 'teardown_class', None) if teardown_class is not None: teardown_class = getattr(teardown_class, 'im_func', teardown_class) + teardown_class = getattr(teardown_class, '__func__', teardown_class) teardown_class(self.obj) class Instance(PyCollectorMixin, pytest.Collector): diff --git a/testing/test_python.py b/testing/test_python.py index b39ca6a16..2d0dc3622 100644 --- a/testing/test_python.py +++ b/testing/test_python.py @@ -56,6 +56,24 @@ class TestClass: "*collected 0*", ]) + def test_setup_teardown_class_as_classmethod(self, testdir): + testdir.makepyfile(""" + class TestClassMethod: + @classmethod + def setup_class(cls): + pass + def test_1(self): + pass + @classmethod + def teardown_class(cls): + pass + """) + result = testdir.runpytest() + result.stdout.fnmatch_lines([ + "*1 passed*", + ]) + + class TestGenerator: def test_generative_functions(self, testdir): modcol = testdir.getmodulecol("""