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


问题内容

我认为我缺少有关doctest的狮身人面像扩展的信息。

文档中的典型示例是:

.. doctest::

   >>> print 1
   1

没有办法让Sphinx1自动生成输出(在这里:)吗?

据我了解,可以运行:

$ make doctest

它可以测试代码段,并将实际输出与预期输出进行比较。例如,如果您有

.. doctest::

   >>> print 1
   3

doctest会警告您1它在预期的时间内得到的3

相反,我希望狮身人面像将真正的输出单独插入我的文档字符串或.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]

我相信这是有可能的,并且会非常方便!


问题答案:

对于 您尝试做的事情,我必须强烈(但请客气) 提出建议

您要问的是针对doctest模块的“测试部分” :

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

这些测试有一个原因,就是 您要 编写输入和期望的输出,然后让Python检查期望的输出是否与实际输出匹配。

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

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

我发现这段有关测试驱动开发的视频非常有趣,如果您想了解更多有关此论点的信息,也许对您很感兴趣。