doctest调用哪些函数的顺序?

Order in which functions are invoked by doctest?

我很困惑为什么 doctest.testmod() 以奇怪的顺序调用测试函数

from doctest import testmod

def test_forwrite():
    '''
    >>> test_forwrite()
    OP: Done
    '''
    write()

def test_forread():
    '''
    >>> test_forread()
    OP: Done
    '''
    read()

if __name__ == "__main__":
    testmod(verbose = True)

为什么不管其定义的 test_forread() 总是先测试的顺序。

这是因为 testmod 函数通过按 alphabetical(排序)顺序调用它们来测试给定 module/program 中的函数。

在您的情况下,test_forread() 将首先被调用,因为当按字母顺序排序时它先于 test_forwrite()

测试按名称排序。 test_forread 按字母顺序排在 test_forwrite() 之前。

来自doctest source code for the DocTestFinder.find() method

# Sort the tests by alpha order of names, for consistency in
# verbose-mode output.  This was a feature of doctest in Pythons
# <= 2.3 that got lost by accident in 2.4.  It was repaired in
# 2.4.4 and 2.5.
tests.sort()

doctest.testmod() uses DocTestFinder().find() 在您的模块中找到测试。

但是,您的测试永远不应依赖于 any 给定的顺序。编写独立的测试,这样您就可以 运行 单独或并行测试。