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

时间:2014-05-11 15:42:08

标签: python mocking python-unittest

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的其他功能,情况也是如此。 documentation似乎没有提到这种情况。

1 个答案:

答案 0 :(得分: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()无法找到此类内置函数的签名。