我试图找出如何让 python setup.py test
运行相当于 python -m unittest discover
。我不想使用 run _ tests.py 脚本,也不想使用任何外部测试工具(如 nose
或 py.test
)。如果该解决方案只适用于 python 2.7,那么没问题。
在 setup.py
中,我想我需要在配置中为 test_suite
和/或 test_loader
字段添加一些内容,但是我似乎找不到一个能正确工作的组合:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
只使用 Python 2.7内置的 unittest
是否可行?
仅供参考,我的项目结构是这样的:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
更新 : 使用 unittest2
可以做到这一点,但是我希望只使用 unittest
找到一些等价的东西
来自 https://pypi.python.org/pypi/unittest2
Unittest2包含一个非常基本的与 setuptools 兼容的测试收集器。在 setup.py 中指定 test _ kit = ‘ unittest2.Collection’。这将使用包含 setup.py 的目录中的默认参数启动测试发现,因此它可能是最有用的示例(参见 unittest2/Collector.py)。
现在,我只是使用一个名为 run_tests.py
的脚本,但是我希望我可以通过转向一个只使用 python setup.py test
的解决方案来摆脱这个问题。
下面是我希望移除的 run_tests.py
:
import unittest
if __name__ == '__main__':
# use the default shared TestLoader instance
test_loader = unittest.defaultTestLoader
# use the basic test runner that outputs to sys.stderr
test_runner = unittest.TextTestRunner()
# automatically discover all tests in the current dir of the form test*.py
# NOTE: only works for python 2.7 and later
test_suite = test_loader.discover('.')
# run the test suite
test_runner.run(test_suite)