我已经开始将doctests集成到我的模块中。 (Hooray!)这些文件往往是以脚本开头的文件,现在是__name__=='__main__'
中CLI应用程序的一些功能,所以我不想在那里运行测试。我尝试了nosetests --with-doctest
,但是遇到了很多我不想看到的失败,因为在测试发现期间,这个导入模块不包含doctests但需要导入我在这个系统上没有安装的东西,或者应该在特殊的python安装中运行。有没有办法可以运行我所有的doctests?
我已经考虑过vim中的热键来运行“import doctest; doctest.testfile(currentFilename)”以在当前模块中运行我的doctests,以及另一个运行所有测试的脚本 - 其他doctest用户会做什么?或者我应该使用doctest之外的东西吗?
答案 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