Autospec mock не правильно сохраняет подпись? - PullRequest
0 голосов
/ 08 января 2019

Согласно справочнику :

Автоматическое определение создает фиктивные объекты, которые имеют те же атрибуты и методы, что и объекты, которые они заменяют, а любые функции и методы (включая конструкторы) имеют ту же сигнатуру вызова, что и реальный объект.

Но это не похоже на правду. Stdlib inspect по-прежнему видит общую *args, **kwargs подпись на макете:

>>> from unittest.mock import patch
>>> def foo(arg1, arg2, arg3):
...     pass
...     
>>> print(*inspect.signature(foo).parameters)
arg1 arg2 arg3
>>> with patch("__main__.foo", autospec=True) as mock:
...     print(*inspect.signature(mock).parameters)
...     
args kwargs

Автоспек работает , работает , в этом случае mock(1,2,3,4) будет корректно повышать TypeError: too many positional arguments, но, похоже, это реализовано с помощью некоторого кода глубже в стеке вызовов. Это не делается с помощью подписи вызова.

В коде, где вы на самом деле полагаетесь на саму подпись (и нуждаетесь в правильной подписи, сохраняемой при проверке в тестах), как автоматически задать макет таким образом, чтобы правильно сохранить подпись?

...