使用Sphinx扩展自动生成doctest输出

use*_*990 8 python doctest python-sphinx

我想我错过了关于doctest的sphinx扩展的一些内容.

文档中的典型示例是:

.. doctest::

   >>> print 1
   1
Run Code Online (Sandbox Code Playgroud)

有没有办法让sphinx 1自动生成输出(这里:) ?

据我所知,可以运行:

$ make doctest
Run Code Online (Sandbox Code Playgroud)

它具有测试代码片段的效果,并将实际输出与预期输出进行比较.例如,如果你有

.. doctest::

   >>> print 1
   3
Run Code Online (Sandbox Code Playgroud)

doctest会警告你1它正在期待它3.

相反,我希望sphinx在我的docstring或我的.rst文件中单独插入实际输出.例如,如果我们有类似的东西:

.. doctest::

    >>> print 1
    >>> print [2*x for x in range(3)]
Run Code Online (Sandbox Code Playgroud)

我希望当我们运行make doctest一个选项时,它会将docstring更改为:

.. doctest::

   >>> print 1
   1
   >>> print [2*x for x in range(3)]
   [0,2,4]
Run Code Online (Sandbox Code Playgroud)

我确信这是可能的,而且非常方便!

Rik*_*ggi 10

我必须强烈(但善意地)反对你要做的事情.

你问的是反对doctest模块的"测试部分" :

doctest模块搜索看起来像交互式Python会话的文本片段,然后执行这些会话以验证它们是否完全如图所示工作.

如果编写输入和预期输出并让Python检查预期输出是否与实际输出匹配,则这些测试有一个原因.

如果你让Python产生预期的输出,那么它将不再是预期的(由用户/作者),因此doctests永远不会失败,因此这些测试将是无用的.

注意:如果在函数内部没有逻辑(如果/ else,while循环,追加等等),则无需测试它们.并且测试不能重现测试逻辑,否则它们不再测试该功能.

我发现这个关于测试驱动开发的视频非常有趣,如果你想了解更多关于这个论点的话,也许你会感兴趣.


mzj*_*zjn 7

以下是关于如何实现我怀疑您可能正在寻找的内容的建议:

Doug Hellmann撰写了一篇有趣的文章,名为"使用Sphinx,Paver和Cog编写技术文档".它有一节描述了如何使用Cog工具自动运行代码示例并捕获输出以包含在Sphinx构建的文档中.


还有一个名为autorun的Sphinx扩展,它可以在特殊runblock指令中执行代码 并将输出附加到文档中.