From 7d6edb9ca57945cd42922e6c499ba510598dbff4 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 4 Nov 2015 19:54:18 -0200 Subject: [PATCH] Fix unittest.skip decorator test and separate the fix into a different, self-doc function --- _pytest/unittest.py | 24 ++++++++++++++---------- testing/test_unittest.py | 12 +++++++----- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/_pytest/unittest.py b/_pytest/unittest.py index 1292c2a93..bb7579331 100644 --- a/_pytest/unittest.py +++ b/_pytest/unittest.py @@ -69,22 +69,26 @@ 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._fix_unittest_skip_decorator() self._obj = getattr(self._testcase, self.name) if hasattr(self._testcase, 'setup_method'): self._testcase.setup_method(self._obj) if hasattr(self, "_request"): self._request._fillfixtures() + def _fix_unittest_skip_decorator(self): + """ + 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. + + See issue #1169 + """ + if sys.version_info[0] == 2: + setattr(self._testcase, "__name__", self.name) + def teardown(self): if hasattr(self._testcase, 'teardown_method'): self._testcase.teardown_method(self._obj) diff --git a/testing/test_unittest.py b/testing/test_unittest.py index 3ff90d058..53dde6ea3 100644 --- a/testing/test_unittest.py +++ b/testing/test_unittest.py @@ -721,14 +721,16 @@ def test_unittest_raise_skip_issue748(testdir): @pytest.mark.skipif("sys.version_info < (2,7)") def test_unittest_skip_issue1169(testdir): - testpath = testdir.makepyfile(test_foo=""" + testdir.makepyfile(test_foo=""" import unittest class MyTestCase(unittest.TestCase): - @unittest.skip + @unittest.skip("skipping due to reasons") def test_skip(self): self.fail() """) - reprec = testdir.inline_run(testpath) - reprec.assertoutcome(passed=1) - \ No newline at end of file + result = testdir.runpytest("-v", '-rs') + result.stdout.fnmatch_lines(""" + *SKIP*[1]*skipping due to reasons* + *1 skipped* + """)