Python:mock.create_autospec() 对内置函数不进行参数检查

2 投票
1 回答
932 浏览
提问于 2025-04-18 06:12

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() 这个功能无法找到这些内置函数的具体参数信息。

撰写回答