使用装饰器时,Python MagicMock模拟太多

时间:2018-08-31 12:18:32

标签: python mocking python-sphinx read-the-docs

我正在尝试通过Sphinx获取在ReadTheDocs安装基础上建立的文档。我要记录的类是从较大的Framework继承的,因此无法轻松安装,因此希望对其进行模拟。但是,在嘲笑我实际上想记录的类时,Mock似乎过于贪婪。有问题的代码如下:

Стихи похожи на людей...

我想确保不会盲目地装饰装饰器,而是在我的Sphinx # 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 """ 中明确显示。否则,我将遵循RTD关于模拟模块的建议:

conf.py

现在,我希望对于打印输出,我得到一些有关我要记录的类的信息,例如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()

但是,我也总是得到该类的Mock <ToDocument ...>,当然它没有我要构建的任何文档。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

原来的问题是从模拟类继承。明确开始介绍基类并创建一个空类

class SomeBaseClass:
    pass

conf.py中打补丁解决了问题