此脚本失败:
import mock

class MyClass(object):

    @classmethod
    def my_method(cls):
        print('my_method')

def mocked_method(cls):
    print('I want this method to get called')

with mock.patch.object(MyClass,'my_method',mocked_method):
    MyClass.my_method()

例外:

Traceback (most recent call last):
  File "/home/foo/tmp/test_mocking_classmethod.py",line 14,in <module>
    MyClass.my_method()
TypeError: unbound method mocked_method() must be called with MyClass instance as first argument (got nothing instead)

解决方法

Python函数是 descriptors,Python将这些函数绑定到它们被查找的实例,或者在classmethod的情况下,绑定到类.因为你没有在替换函数上使用classmethod装饰器,所以它被错误地绑定(作为常规方法,因此没有传入cls).

只需手动将目标包装在classmethod装饰器中:

with mock.patch.object(MyClass,classmethod(mocked_method)):
    MyClass.my_method()

这里我手动应用了@classmethod装饰器,但您也可以直接在目标函数上使用它作为装饰器:

@classmethod
def mocked_method(cls):
    print('I want this method to get called')

with mock.patch.object(MyClass,mocked_method):
    MyClass.my_method()

演示:

>>> import mock
>>> class MyClass(object):
...     @classmethod
...     def my_method(cls):
...         print('my_method')
... 
>>> def mocked_method(cls):
...     print('I want this method to get called')
... 
>>> with mock.patch.object(MyClass,classmethod(mocked_method)):
...     MyClass.my_method()
... 
I want this method to get called

python – TypeError:尝试模拟classmethod时的未绑定方法的更多相关文章

  1. swift 字符串创建类

    先看个OC的swift

  2. python类名和类方法cls修改类变量的值

    这篇文章主要介绍了python类名和类方法cls修改类变量的值,通过类对象是无法修改类变量的值的,本质其实是给类对象新添加 name 和 age 变量,下文更多的相关介绍需要的小伙伴可任意参考一下

  3. 如何在Windows中使用golang清除控制台?

    我尝试了很多方法,比如和并且转义序列也不起作用所有你需要的是:

  4. 在PHP中哪个更好?用’@’抑制警告或用isset()运行额外的检查?

    例如,如果我实现一些简单的对象缓存,哪个方法更快?我读了某个地方@需要大量时间执行,特别是当警告/通知实际上被发出和被禁止的时候.isset()另一方面意味着额外的哈希查找.那么哪个更好,为什么?

  5. 正则表达式及其在python上的应用

    今天学习了一早上正则表达式。另外关于python的正则表达式,主要使用re模块。我们以任务为导向介绍python正则表达式的用法。正确的代码如下:结果为:这里python的命名组与以往的不一样,使用的是(?我添加一个括号试试还是不对,前面的“Ihavea”根本没有匹配正确的写法是应该使用无捕获分组参考:正则表达式-python-无捕获分组与分支选择

  6. 如何在PHPUnit中跳过/标记不完整的整个测试套件?

    描述我有一个TestSuite,我需要标记为跳过(整个测试套件–不是套件中的具体测试用例).正如你可以看到,抛出PHPUnit_Framework_SkippedTestError异常不起作用.它不被PHPUnit捕获,并且将任何未捕获的异常中断执行(这是可以理解的,因为在实际运行测试之前,在构建测试层次结构时调用了suite()方法).我看到一个名为PHPUnit_Framework_Skipp

  7. ecshop ajax请求验证captcha(验证码)

    Ecshop内置了强大的验证码机制,我们只要调用cls_captcha.PHP这个验证码就可以。说明一点,当我们使用自己定义的PHP文件时,我们最好加上IN_ECS为ture的设置,否则可能抛出Hacker攻击的错误,下面给出ajax请求验证代码

  8. angularjs – 如何测试一个元素是否有类使用量角器?

    我正在尝试量角器e2e测试角应用程序,没有想出如何检测一个元素是否有一个特定的类。在我的情况下,测试点击提交按钮,现在我想知道如果form[name=“getoffer”]有类.ngDirty。什么可能是解决方案?一个你必须注意使用tomatch(),如在接受的答案,是部分匹配。toMatch,即使元素有不正确的类,它也会返回true。

  9. java – 确定Class对象是否是抽象类的实例

    我正在尝试确定泛型类对象是否是抽象类的实例.到目前为止,我没有太多运气.下面是我正在尝试使用的代码.AbstractActivity是我扩展我的一些活动的父类的名称.解决方法我会尝试:

  10. Java类型参数的类名称?

    假设T为类类型参数,为什么不能使用T.class我正在编写一个下载页面的功能,并根据传递的类进行解析.对于解析,我使用另一个函数,其签名是:ParSEObject::parse解决方法Java泛型是通过typeerasure实现的.它们只能用于编译时检查.编译完成后,对象将被更改为最低的公共对象..编译的字节码不知道T是什么.如果您想访问该类,则需要将方法更改为:

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部