gpt4 book ai didi

python - 模拟函数参数名称以与 inspect.getargspec 一起使用

转载 作者:太空狗 更新时间:2023-10-30 02:59:19 25 4
gpt4 key购买 nike

我正在尝试为测试模拟一个函数,该测试最终通过 inspect.getargspec 函数传递模拟。我想使用一些特定的名称作为模拟函数的参数名称。

据我所知,没有具体的方法来模拟参数名称,所以我尝试使用 Mock 的 spec= 参数:

In [1]: import mock, inspect

In [2]: inspect.getargspec(mock.Mock(spec=lambda a,b:None))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-de358c5a968d> in <module>()
----> 1 inspect.getargspec(mock.Mock(spec=lambda a,b:None))

/usr/lib/python2.7/inspect.pyc in getargspec(func)
815 if not isfunction(func):
816 raise TypeError('{!r} is not a Python function'.format(func))
--> 817 args, varargs, varkw = getargs(func.func_code)
818 return ArgSpec(args, varargs, varkw, func.func_defaults)
819

/usr/lib/python2.7/inspect.pyc in getargs(co)
750
751 if not iscode(co):
--> 752 raise TypeError('{!r} is not a code object'.format(co))
753
754 nargs = co.co_argcount

TypeError: <Mock name='mock.func_code' id='140395908951120'> is not a code object

所以,是的,确实,Mock 不是代码对象。我如何模拟参数名称以便 inspect.getargspec 返回这些名称?

最佳答案

您可以改为修补 inspect.getargspec:

getargspec_orig = inspect.getargspec
def getargspec_patch(f):
if f == <your function>:
return ArgSpec(args=[...], varargs=..., keywords=..., defaults=(...))
else:
return getargspec_orig(f)

with patch('inspect.getargspec', new_callable=getargspec_patch):
# do your testing here

关于python - 模拟函数参数名称以与 inspect.getargspec 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31858387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com