summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_inspect.py19
-rw-r--r--Lib/unittest/mock.py10
-rw-r--r--Misc/NEWS.d/next/Library/2022-08-27-10-35-50.gh-issue-96127.8RdLre.rst2
3 files changed, 30 insertions, 1 deletions
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 1b589c8..aa75724 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -3283,6 +3283,25 @@ class TestSignatureObject(unittest.TestCase):
((('a', 10, ..., "positional_or_keyword"),),
...))
+ def test_signature_on_mocks(self):
+ # https://github.com/python/cpython/issues/96127
+ for mock in (
+ unittest.mock.Mock(),
+ unittest.mock.AsyncMock(),
+ unittest.mock.MagicMock(),
+ ):
+ with self.subTest(mock=mock):
+ self.assertEqual(str(inspect.signature(mock)), '(*args, **kwargs)')
+
+ def test_signature_on_noncallable_mocks(self):
+ for mock in (
+ unittest.mock.NonCallableMock(),
+ unittest.mock.NonCallableMagicMock(),
+ ):
+ with self.subTest(mock=mock):
+ with self.assertRaises(TypeError):
+ inspect.signature(mock)
+
def test_signature_equality(self):
def foo(a, *, b:int) -> float: pass
self.assertFalse(inspect.signature(foo) == 42)
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index b3c0e28..0f93cb5 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -2217,7 +2217,15 @@ class AsyncMockMixin(Base):
code_mock = NonCallableMock(spec_set=_CODE_ATTRS)
code_mock.__dict__["_spec_class"] = CodeType
code_mock.__dict__["_spec_signature"] = _CODE_SIG
- code_mock.co_flags = inspect.CO_COROUTINE
+ code_mock.co_flags = (
+ inspect.CO_COROUTINE
+ + inspect.CO_VARARGS
+ + inspect.CO_VARKEYWORDS
+ )
+ code_mock.co_argcount = 0
+ code_mock.co_varnames = ('args', 'kwargs')
+ code_mock.co_posonlyargcount = 0
+ code_mock.co_kwonlyargcount = 0
self.__dict__['__code__'] = code_mock
self.__dict__['__name__'] = 'AsyncMock'
self.__dict__['__defaults__'] = tuple()
diff --git a/Misc/NEWS.d/next/Library/2022-08-27-10-35-50.gh-issue-96127.8RdLre.rst b/Misc/NEWS.d/next/Library/2022-08-27-10-35-50.gh-issue-96127.8RdLre.rst
new file mode 100644
index 0000000..79edd8f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-08-27-10-35-50.gh-issue-96127.8RdLre.rst
@@ -0,0 +1,2 @@
+``inspect.signature`` was raising ``TypeError`` on call with mock objects.
+Now it correctly returns ``(*args, **kwargs)`` as infered signature.