什么是doctest在Sphinx中的意义?有人可以通过一个简单的例子来帮助我理解它的使用。
答案 0 :(得分:3)
Sphinx的doctest用于测试文档本身。换句话说,它允许自动验证文档的示例代码。虽然它也可以验证Python代码是否按预期工作,但仅仅为此目的不需要Sphinx(您可以更轻松地使用标准库的doctest
模块)。
所以,一个真实的场景(我经常发现自己的场景)是这样的:一个新功能即将完成,所以我写了一些文档来介绍新功能。新文档包含一个或多个代码示例。在发布文档之前,我在我的Sphinx文档目录中运行make doctest
以验证我为受众编写的代码示例是否真的有用。
答案 1 :(得分:1)
这是一个简单的例子(来自the doctest module):
"""
This is the "example" module.
The example module supplies one function, factorial(). For example,
>>> factorial(5)
120
"""
def factorial(n):
"""Return the factorial of n, an exact integer >= 0.
If the result is small enough to fit in an int, return an int.
Else return a long.
>>> [factorial(n) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> [factorial(long(n)) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> factorial(30)
265252859812191058636308480000000L
>>> factorial(30L)
265252859812191058636308480000000L
>>> factorial(-1)
Traceback (most recent call last):
...
ValueError: n must be >= 0
Factorials of floats are OK, but the float must be an exact integer:
>>> factorial(30.1)
Traceback (most recent call last):
...
ValueError: n must be exact integer
>>> factorial(30.0)
265252859812191058636308480000000L
It must also not be ridiculously large:
>>> factorial(1e100)
Traceback (most recent call last):
...
OverflowError: n too large
"""
import math
if not n >= 0:
raise ValueError("n must be >= 0")
if math.floor(n) != n:
raise ValueError("n must be exact integer")
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
result = 1
factor = 2
while factor <= n:
result *= factor
factor += 1
return result
if __name__ == "__main__":
import doctest
doctest.testmod()
答案 2 :(得分:1)
我自己没有使用它,但我的理解是它扩展了doctest
的功能。例如,它添加了testsetup
和testcleanup
指令,您可以将设置和拆卸逻辑放入其中。使Sphinx可以在文档中排除它。