我想我错过了关于doctest的sphinx扩展的一些内容。
文档中的典型示例是:
.. doctest::
>>> print 1
1
有没有办法让sphinx自动生成输出(这里:1
)?
据我了解,可以运行:
$ make doctest
具有测试代码片段的效果,并将实际输出与预期输出进行比较。例如,如果你有
.. doctest::
>>> print 1
3
doctest会警告你,1
期待它3
。
相反,我希望sphinx在我的docstring或我的.rst文件中单独插入实际输出。例如,如果我们有类似的东西:
.. doctest::
>>> print 1
>>> print [2*x for x in range(3)]
我希望当我们使用选项运行make doctest
时,它会将文档字符串更改为:
.. doctest::
>>> print 1
1
>>> print [2*x for x in range(3)]
[0,2,4]
我确信这是可能的,而且非常方便!
答案 0 :(得分:9)
我必须强烈(但善意地)建议反对你想要做的事情。
您要问的是doctest module:
的“测试部分”doctest模块搜索看起来像交互式Python会话的文本片段,然后执行这些会话以验证它们是否完全如图所示。
这些测试有一个理由,如果你写入输入和预期的输出,让Python检查预期的输出是否与实际输出相匹配。
如果你让Python产生预期的输出,那么......它将不再是 expect (由用户/作者),因此doctests永远不会失败,因此这些测试将毫无用处。
注意:如果在函数内部没有逻辑(如果/ else,while循环,追加等等),则无需测试它们。并且测试不能重现测试逻辑,否则它们不再测试该函数。
我发现关于测试驱动开发的this video非常有趣,如果你想了解更多关于这个论点的话,也许你可能感兴趣。
答案 1 :(得分:7)
以下是关于如何实现我怀疑您可能正在寻找的建议:
Doug Hellmann写了一篇名为Writing Technical Documentation with Sphinx, Paver, and Cog的有趣文章。它有a section描述如何使用Cog工具自动运行代码示例并捕获输出以包含在Sphinx构建的文档中。
还有一个contributed Sphinx extension called autorun可以执行特殊的代码
runblock
指令并将输出附加到文档。
答案 2 :(得分:0)
此功能作为 pytest-accept
的一部分以及 pytest
的扩展提供:https://github.com/max-sixty/pytest-accept
引用:
<块引用>pytest-accept 是一个用于自动更新 doctest 的 pytest 插件 输出。它运行 doctests,观察生成的输出,并写入 将它们添加到 doctests 的文档输出中。
它是为几个用例而设计的: