通过命令行选项从Python程序运行unittest
这是我的设置-通过命令行选项从Python程序运行unittest,python,unit-testing,python-2.7,software-packaging,Python,Unit Testing,Python 2.7,Software Packaging,这是我的设置- project/ __init__.py prog.py test/ __init__.py test_prog.py 我希望能够通过调用prog.py中的命令行选项来运行单元测试。这样,当我部署我的项目时,我可以随时部署运行单元测试的能力 python prog.py --unittest 我需要在prog.py或我的项目的其他部分中做些什么才能让它工作?也许就是您想要的。在test\u prog.py中执行load\
project/
__init__.py
prog.py
test/
__init__.py
test_prog.py
我希望能够通过调用prog.py中的命令行选项来运行单元测试。这样,当我部署我的项目时,我可以随时部署运行单元测试的能力
python prog.py --unittest
我需要在prog.py或我的项目的其他部分中做些什么才能让它工作?也许就是您想要的。在test\u prog.py
中执行load\u tests
功能,并使用prog.py
中的以下代码加载和运行测试:
import unittest
import test.test_prog
suite = unittest.TestLoader().loadTestsFromModule(test.test_prog)
unittest.TextTestRunner().run(suite)
您必须确保始终遵循一些命名约定(您似乎正在这样做):
test\uuu
是标准),后跟要测试的模块的名称
prog.py
=>test\u prog.py
test/
目录中我们正在做的是:
- 检查命令参数以查看是否存在
(因为这是您希望运行测试的唯一时间)--unittest
- 如果是,那么我们按照我们设置的命名约定创建
测试_prog.py
- 然后我们将其传递给
函数 从指定的目录开始,查找与提供的模式匹配的所有测试模块(递归到子目录) 在本例中,它将在TestLoader().discover
目录中查找名为test/
的任何模块。当它这样做时,它加载它并创建一个包含我们想要运行的测试用例的测试套件test\u prog.py
- 最后,我们手动测试
,以运行在上一步中获得的unittest
suite
通常,
unittest
将在后台为我们完成所有这些,但是由于我们试图运行一个特定的测试模块,我们必须准确地告诉如何以及从何处获取它
另外,请注意,您必须对希望执行此操作的每个文件执行此操作。Python
unittest
模块包含自己的函数,您可以从命令行运行此函数:
$ python -m unittest discover
要在模块内运行此命令,可以使用子流程
模块:
#!/usr/bin/env python
import sys
import subprocess
# ...
# the rest of your module's code
# ...
if __name__ == '__main__':
if '--unittest' in sys.argv:
subprocess.call([sys.executable, '-m', 'unittest', 'discover'])
如果您的模块有其他命令行选项,您可能希望查看更多高级选项。我刚刚删除了文件系统中项目下的
.idea
隐藏目录
我重新启动,重新打开项目,这个问题就解决了
#!/usr/bin/env python
import sys
import subprocess
# ...
# the rest of your module's code
# ...
if __name__ == '__main__':
if '--unittest' in sys.argv:
subprocess.call([sys.executable, '-m', 'unittest', 'discover'])