11

我想我错过了关于 doctest 的 sphinx 扩展的一些信息。

文档中的典型示例是:

.. doctest::

   >>> print 1
   1

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

据我了解,可以运行:

$ make doctest

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

.. doctest::

   >>> print 1
   3

doctest 会警告你1它在期待的时候得到了3

相反,我希望 sphinx 将真实输出单独插入到我的文档字符串或 .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]

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

4

3 回答 3

9

我必须强烈(但友善地)建议您不要尝试做什么。

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

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

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

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

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

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

于 2012-03-21T17:47:36.207 回答
7

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

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


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

于 2012-03-22T18:58:33.523 回答
0

此功能可作为以下内容的一部分pytest-accept和扩展pytesthttps ://github.com/max-sixty/pytest-accept

引用:

pytest-accept 是一个 pytest 插件,用于自动更新 doctest 输出。它运行 doctests,观察生成的输出,并将它们写入 doctests 的记录输出。

它是为几个用例设计的:

  • 使用 doctests 并且不喜欢从 pytest 错误日志中手动复制生成的输出并将它们粘贴到他们的 doctests 的记录输出中的人。pytest-accept 为您进行复制和粘贴。
  • 那些通常觉得编写测试有点烦人的人,更喜欢通过“运行代码并查看它是否有效”来进行开发。该库旨在使测试成为开发循环中令人愉快的一部分。
于 2021-07-29T15:39:29.773 回答