对文件夹中的所有python模块运行我的所有doctests,而不会因为导入错误而看到失败

时间:2010-09-06 18:54:21

标签: python testing doctest

我已经开始将doctests集成到我的模块中。 (Hooray!)这些文件往往是以脚本开头的文件,现在是__name__=='__main__'中CLI应用程序的一些功能,所以我不想在那里运行测试。我尝试了nosetests --with-doctest,但是遇到了很多我不想看到的失败,因为在测试发现期间,这个导入模块不包含doctests但需要导入我在这个系统上没有安装的东西,或者应该在特殊的python安装中运行。有没有办法可以运行我所有的doctests?

我已经考虑过vim中的热键来运行“import doctest; doctest.testfile(currentFilename)”以在当前模块中运行我的doctests,以及另一个运行所有测试的脚本 - 其他doctest用户会做什么?或者我应该使用doctest之外的东西吗?

2 个答案:

答案 0 :(得分:6)

您还可以创建包含所需doctests模块的单元测试,它是doctests的导航功能:http://docs.python.org/2/library/doctest.html#unittest-api

import unittest
import doctest 
import my_module_with_doctests

def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite(my_module_with_doctests))
    return tests

答案 1 :(得分:3)

我认为nose就是这样。您应该使用-e显式排除有问题的模块,或者使用以下结构捕获代码中缺少的导入:

try:
    import simplejson as json
except ImportError:
    import json

<强>更新

另一个选择是为缺少的模块提供模拟替换。假设你的代码有这样的东西:

import myfunkymodule

并且您正尝试在缺少myfunkymodule的系统中运行测试。您可以创建一个mock_modules/myfunkymodule.py文件,其中包含您需要的模拟实现(可能使用MiniMock,如果您使用doctest,我强烈建议您这样做。)然后你可以像这样运行nose

$ PYTHONPATH=path_to/mock_modules nosetests --with-doctest