Python MagicMock在使用装饰器时嘲弄太多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python MagicMock在使用装饰器时嘲弄太多相关的知识,希望对你有一定的参考价值。
我试图通过Sphinx获取基于ReadTheDocs安装的文档。我正在记录的类继承自一个更大的框架,我无法轻松安装,因此想要模拟。然而,Mock似乎过于贪婪地嘲笑我实际想要记录的类。有问题的代码如下:
# imports that need to be mocked
from big.framework import a_class_decorator, ..., SomeBaseClass
@a_class_decorator("foo", "bar")
class ToDocument(SomeBaseClass):
""" Lots of nice documentation here
which will never appear
"""
def a_function_that_is_being_documented():
""" This will show up on RTD
"""
我确定我不会盲目地嘲笑装饰者,而是在我的Sphinx conf.py
中明确表达。否则,我遵循模拟模块的RTD建议:
class MyMock(MagicMock):
@classmethod
def a_class_decorator(cls, classid, version):
def real_decorator(theClass):
print(theClass)
return theClass
return real_decorator
@classmethod
def __getattr__(cls, name):
return MagicMock()
sys.modules['big.framework'] = MyMock()
现在我希望对于打印输出我得到的东西指的是我的文档类,例如<ToDocument ...>
。
但是,我总是得到该类的模拟,<MagicMock spec='str' id='139887652701072'>
,当然没有我想要构建的任何文档。有任何想法吗?
答案
原来问题是来自模拟类的继承。开始明确基类并创建一个空类
class SomeBaseClass:
pass
在conf.py
补丁解决了这个问题
以上是关于Python MagicMock在使用装饰器时嘲弄太多的主要内容,如果未能解决你的问题,请参考以下文章
解决报错:在Python中使用property装饰器时,出现错误:TypeError: descriptor ‘setter‘ requires a ‘property‘ object but(代码片
装饰器仅在装饰方法时有效,但在使用作为参数传递的方法调用装饰器时无效
使用Typescript和类组件装饰器时如何在Vue Router中传递props