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以外的东西?
您还可以创建包含所需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)
我认为鼻子就是方法。-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)