...还有一匹小马!不开玩笑,我正在寻找一种“只需运行即可”的测试组织方法。大多数东西都可以工作,但不是所有的部分都能配合得好。这是我想要的:
- 自动发现测试,包括文档测试。请注意,文档测试的总和不能出现在单个测试中(即不是py.test --doctest-modules的方式)。
- 能够并行运行测试。(类似于xdist的py.test -n)
- 生成覆盖率报告。
- 使
python setup.py test
只需要运行即可。
我的当前方法涉及到一个 tests
目录和 load_tests 协议。其中所有文件的名称都像 test_*.py
。如果我创建一个名为 test_doctests.py
的文件,并使用以下内容,则可以使 python -m unittest discover
运行:
import doctest
import mymodule1, mymodule2
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(mymodule1))
tests.addTests(doctest.DocTestSuite(mymodule2))
return tests
这种方法的好处是可以使用setuptools并提供setup(test_suite="unittest2.collector")
。
然而,这种方法有一些问题:
- coverage.py需要运行一个脚本。因此,在这里我不能使用unittest2发现。
- py.test不运行load_tests函数,因此它无法找到doctest和
--doctest-modules
选项很烂。 - nosetests运行
load_tests
函数,但不提供任何参数。在nose的一侧,这似乎完全失效了。
如何改善这些问题或解决上述问题?