Bri*_*lee 7 python mocking read-the-docs
我一直在与Read the Docs斗争。导入的模块与 I/O 交互,因此文档不包含任何文本。 但是构建不会失败。
我正在尝试在 doc/conf.py 中使用mock或MagicMock但它不起作用。
基本上,我想mock整个导入。所以RTD并没有尝试运行任何代码。只需从 DocStrings 生成文档。
我只是想要一个模块的mock 所有元素。在类,函数和变量。 任何带有 DocString 的东西。
目前我必须在 virtualenv 中安装项目,以满足导入。如果没有必要,我想避免这种情况。现在......如果我不这样做,那么文档也不包含任何文本。 同样,构建不会失败。
"""Basic DocSting Comments"""
from external.module import *
foo = module()
foo.connect()
"""
I want this to show up in RTD.
"""
Run Code Online (Sandbox Code Playgroud)
我的具体案例可以在这里找到。
from mock import MagicMock
MOCK_MODULES = ['external.module', 'eternal.module.module', 'external.module.module.connect']
for mod_name in MOCK_MODULES:
sys.modules[mod_name] = MagicMock()
Run Code Online (Sandbox Code Playgroud)
我尝试了十几种不同的东西,但没有运气。使用mock和MagicMock,advanced settings在 RTD 中不同。 一切都没有运气。
我确实遇到了一个丑陋的黑客。但它违背了使用 DocStrings 的目的。再次编写代码以便 RTD 可以捕获 DocStings,不妨将其编写在单独的文档中。
if __name__ == "__main__":
this = foo.connect()
"""
This is where the real DocStrings go.
"""
else:
this = 'this is the connect'
"""
This is where the RTD DocStrings would go
"""
Run Code Online (Sandbox Code Playgroud)
我不想以两倍的代码结束,只是为了添加一些文档。
我还想将它与 MySQL 连接器一起使用。由于 RTD 在遇到此包时也会中断。我不能用requirements.txt.
import mysql.connector as db
db_connection = db.connect(**my_config)
"""
Perhaps I want to include some details here.
"""
Run Code Online (Sandbox Code Playgroud)
我在这篇博客文章中找到的以下解决方案对我有用。我想嘲笑open3d,并且可以通过以下方式做到这一点:
from unittest import mock
# Mock open3d because it fails to build in readthedocs
MOCK_MODULES = ["open3d"]
for mod_name in MOCK_MODULES:
sys.modules[mod_name] = mock.Mock()
Run Code Online (Sandbox Code Playgroud)
请注意,您需要导入mockfrom因为unittest.mock是从Python 3.3(源代码unittest)开始的内置模块。
如果你想模拟多个包,你可以这样做:
from unittest import mock
# Mock open3d because it fails to build in readthedocs
MOCK_MODULES = ["open3d", "numpy", "matplotlib", "matplotlib.pyplot"]
for mod_name in MOCK_MODULES:
sys.modules[mod_name] = mock.Mock()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |