From 313050b15b20a510edb1bce15deff25b514ef4e6 Mon Sep 17 00:00:00 2001 From: Lee Kamentsky Date: Wed, 4 Nov 2015 15:30:16 -0500 Subject: [PATCH] Suggested edits by Bruno. Moved fix to TestCaseFunction.setup. Added myself to AUTHORS and added entry to CHANGELOG --- AUTHORS | 1 + CHANGELOG | 3 +++ _pytest/unittest.py | 11 ++++++++++- testing/test_unittest.py | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 27df00fc6..641e20441 100644 --- a/AUTHORS +++ b/AUTHORS @@ -46,6 +46,7 @@ Jason R. Coombs Jurko Gospodnetić Katarzyna Jachim Kevin Cox +Lee Kamentsky Maciek Fijalkowski Maho Marc Schlaich diff --git a/CHANGELOG b/CHANGELOG index 3e254d34f..4be7212a6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,9 @@ 2.8.3.dev --------- +- fix #1169: add __name__ attribute to testcases in TestCaseFunction to + support the @unittest.skip decorator on functions and methods. + - fix #1035: collecting tests if test module level obj has __getattr__(). Thanks Suor for the report and Bruno Oliveira / Tom Viner for the PR. diff --git a/_pytest/unittest.py b/_pytest/unittest.py index 6c3a72697..1292c2a93 100644 --- a/_pytest/unittest.py +++ b/_pytest/unittest.py @@ -69,6 +69,16 @@ class TestCaseFunction(pytest.Function): def setup(self): self._testcase = self.parent.obj(self.name) + # + # See issue #1169 + # + # The @unittest.skip decorator calls functools.wraps(self._testcase) + # The call to functools.wraps() fails unless self._testcase + # has a __name__ attribute. This is usually automatically supplied + # if the test is a function or method, but we need to add manually + # here. + # + setattr(self._testcase, "__name__", self.name) self._obj = getattr(self._testcase, self.name) if hasattr(self._testcase, 'setup_method'): self._testcase.setup_method(self._obj) @@ -134,7 +144,6 @@ class TestCaseFunction(pytest.Function): pass def runtest(self): - setattr(self._testcase, "__name__", self.name) self._testcase(result=self) def _prunetraceback(self, excinfo): diff --git a/testing/test_unittest.py b/testing/test_unittest.py index 287b8d3ac..3ff90d058 100644 --- a/testing/test_unittest.py +++ b/testing/test_unittest.py @@ -719,6 +719,7 @@ def test_unittest_raise_skip_issue748(testdir): *1 skipped* """) +@pytest.mark.skipif("sys.version_info < (2,7)") def test_unittest_skip_issue1169(testdir): testpath = testdir.makepyfile(test_foo=""" import unittest