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

标签 python python-2.7 inspect python-mock

我正在尝试为测试模拟一个函数,该测试最终通过 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/

相关文章:

c# - 具有检查元素功能的 HTML 渲染?如何使用 C#

css - 谷歌浏览器的 "Inspect Element": CSS Hints?

python - Xcode:通过 LLDB 脚本或其他方式显示 Apple 框架类的属性

python - scipy.optimize.minimize 太慢了。我怎样才能加快速度

python - 从 groupby 返回列表的最有效方法

Python:从 Notepad++ 运行代码到 Python 控制台

python - .bashrc 中设置的 Fabric 环境变量不可用

python - 在 psycopg2 中打开 postgres 连接导致 python 崩溃

Python:MemoryError、OverflowError、即时系统卡住

python - 从 Python 中的函数获取类引用