递归加载python中的doctests

时间:2017-10-26 04:30:23

标签: python python-2.7 unit-testing python-unittest doctest

我正在尝试测试一个python模块,它有一个单独的测试模块:

my_module/
test/
setup.py

test模块具有my_module的单元测试,但还需要从doctests加载my_module。为此,我有以下load_tests函数,位于test/__init__.py

import my_module

def load_tests(loader, tests, pattern):
    # Load the unit tests from `test`
    unittests = loader.discover(start_dir=os.path.dirname(__file__), pattern=pattern)
    # Load the doctests from `my_module`
    doctests = doctest.DocTestSuite(my_module)

    tests.addTests(unittests)
    tests.addTests(doctests)
    return tests

然而,这失败并出现错误:

Error
TypeError: object of type 'NoneType' has no len()

我做错了什么?如何在此测试加载程序中加载my_module中的所有doctests?

1 个答案:

答案 0 :(得分:0)

实际上,在我的例子中,实际上是unittest加载器失败了,让我认为这是doctest中的错误。

但是,要回答标题中的问题,您可以递归运行这样的doctests:

import doctest
import pkgutil
import my_module

def load_tests(loader, tests, pattern):
    for importer, name, ispkg in pkgutil.walk_packages(my_module.__path__, my_module.__name__ + '.'):
        tests.addTests(doctest.DocTestSuite(name))
    return tests