这是我的装备-
project/
__init__.py
prog.py
test/
__init__.py
test_prog.py我希望能够通过在prog.py中调用命令行选项来运行我的单元测试。这样,当我部署我的项目时,我可以部署在任何时候运行单元测试的能力。
python prog.py --unittest我在prog.py中需要什么,或者我的其他项目需要什么才能起作用?
发布于 2013-05-31 20:28:22
也许这就是你要找的东西。在load_tests中实现test_prog.py函数,并在prog.py中使用以下代码加载和运行测试:
import unittest
import test.test_prog
suite = unittest.TestLoader().loadTestsFromModule(test.test_prog)
unittest.TextTestRunner().run(suite)发布于 2013-05-31 21:21:05
Python unittest模块包含自己的测试发现函数,您可以从命令行运行该函数:
$ python -m unittest discover要在模块内运行此命令,可以使用subprocess模块:
#!/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'])如果您的模块有其他命令行选项,您可能希望查看argparse以获得更高级的选项。
发布于 2013-05-31 21:13:36
您必须确保始终遵循一些命名约定(您似乎正在这样做):
test_是标准的),后面跟着要测试的模块的名称。
prog.py => test_prog.pytest/目录中。然后你可以做这样的事情:
prog.py
import sys
...
... do module stuff here...
...
if __name__ == "__main__":
# Check if we want to run the tests for this file
if "--unittest" in sys.argv:
import unittest
test_filename = 'test_' + __file__
test_directory = 'test'
suite = unittest.TestLoader().discover(test_directory, pattern=test_filename)
unittest.TextTestRunner(verbosity=2).run(suite)我们正在做的是:
--unittest (因为这是您唯一希望运行测试的时候)。test_prog.py -遵循我们设置的命名约定。TestLoader().discover函数。
发现(.)从指定的目录开始,并找到与所提供的模式匹配的所有测试模块(递归到子目录)。
在我们的示例中,它将查看test/目录中任何名为test_prog.py的模块。当它这样做时,它会加载它,并使用我们想要运行的TestSuite创建一个TestCases。unittest以运行在前一步中获得的suite。通常,unittest会在后台为我们完成所有这些工作,但是由于我们试图运行一个特定的测试模块,所以我们必须准确地说明如何从哪里获得它。
另外,请注意,您必须为执行此操作--每个文件都要执行此操作。
https://stackoverflow.com/questions/16863742
复制相似问题