如何通过 "python setup.py test" 运行单元测试发现?
如何通过 "python setup.py test" 运行单元测试发现?
我正在尝试弄清楚如何使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 <- 我想删除这个文件 setup.py
更新:使用unittest2
是可行的,但我希望找到一个只使用unittest
的等效解决方案。
从 https://pypi.python.org/pypi/unittest2:
unittest2包括一个非常基本的与setuptools兼容的测试收集器。在您的
setup.py
中指定test_suite = 'unittest2.collector'
。这将从包含setup.py
的目录开始测试发现,默认使用默认参数,因此它可能最有用作示例(请参阅unittest2/collector.py)。
目前,我只是使用一个名为run_tests.py
的脚本,但我希望能够通过转换为只使用python setup.py test
的解决方案来摆脱它。
这是我希望删除的run_tests.py
脚本:
import unittest if __name__ == '__main__': # 使用默认的TestLoader实例 test_loader = unittest.defaultTestLoader # 使用基本的测试运行器,输出到sys.stderr test_runner = unittest.TextTestRunner() # 自动发现当前目录中所有以test*.py形式命名的测试 # 注意:仅适用于Python 2.7及更高版本 test_suite = test_loader.discover('.') # 运行测试套件 test_runner.run(test_suite)