Python:mock.create_autospec() 对内置函数不进行参数检查
从 unittest.mock.create_autospec()
获得的模拟对象似乎对某些函数没有进行参数检查。比如,看看下面这段代码(我使用的是 CPython 3.4.0
):
import os
from unittest.mock import create_autospec
def os_chdir(dir): # The same signature as os.chdir().
pass
m1 = create_autospec(os_chdir)
m1('first', 'second') # Raises TypeError: too many positional arguments.
m2 = create_autospec(os.chdir)
m2('first', 'second') # Passes without an exception...
为什么 m1
能正确检查参数数量,而 m2
却不行?其他在交互式会话中打印出来时标识为 built-in function
的函数也是这种情况。文档中似乎没有提到这种情况。
1 个回答
0
根据我找到的信息,答案可能在下面这些内容中:
import inspect
print(inspect.getfullargspec(os_chdir))
# Prints FullArgSpec(args=['dir'], varargs=None, varkw=None, defaults=None,
# kwonlyargs=[], kwonlydefaults=None, annotations={})
print(inspect.getfullargspec(os.chdir))
# Raises ValueError: no signature found for builtin <built-in function chdir>
也就是说,unittest.mock.create_autospec()
这个功能无法找到这些内置函数的具体参数信息。