diff --git a/_pytest/python.py b/_pytest/python.py index 89be2598a..544055ec9 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -1841,7 +1841,13 @@ def getfuncargnames(function, startindex=None): if startindex is None: startindex = inspect.ismethod(function) and 1 or 0 if realfunction != function: - startindex += len(getattr(function, "patchings", [])) + mock = sys.modules.get('mock') + if mock is not None: + for patching in getattr(function, "patchings", []): + if not patching.attribute_name and patching.new is mock.DEFAULT: + startindex += 1 + else: + startindex += len(getattr(function, "patchings", [])) function = realfunction argnames = inspect.getargs(py.code.getrawcode(function))[0] defaults = getattr(function, 'func_defaults', diff --git a/testing/python/integration.py b/testing/python/integration.py index 6fbf44572..e070b4398 100644 --- a/testing/python/integration.py +++ b/testing/python/integration.py @@ -124,8 +124,11 @@ class TestMockDecoration: def test_hello(self, abspath): os.path.abspath("hello") abspath.assert_any_call("hello") + def mock_basename(path): + return "mock_basename" @mock.patch("os.path.abspath") @mock.patch("os.path.normpath") + @mock.patch("os.path.basename",new=mock_basename) def test_someting(normpath, abspath, tmpdir): abspath.return_value = "this" os.path.normpath(os.path.abspath("hello"))