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

Tho*_*mas 7 python testing doctest

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

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

jb.*_*jb. 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
Run Code Online (Sandbox Code Playgroud)


Mar*_*ech 3

我认为鼻子就是方法。-e您应该使用如下结构明确排除有问题的模块,或者捕获代码中缺少的导入:

try:
    import simplejson as json
except ImportError:
    import json
Run Code Online (Sandbox Code Playgroud)

更新:

另一种选择是为缺失的模块提供模拟替代品。假设您的代码有这样的内容:

import myfunkymodule
Run Code Online (Sandbox Code Playgroud)

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

$ PYTHONPATH=path_to/mock_modules nosetests --with-doctest
Run Code Online (Sandbox Code Playgroud)