我正在尝试测试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