我正在尝试测试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加载所有doctest?

最佳答案

实际上,在我的示例中,实际上是unittest加载器发生故障,使我认为这是doctest中的故障。

但是,要回答标题中的问题,可以递归运行doctest,如下所示:

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

10-01 19:37