Pet*_*ete 57 python unit-testing
我正在开发一个包含多个源文件的Python模块,每个源文件都有自己的源代码测试类,这些测试类源自unittest.考虑目录结构:
dirFoo\
test.py
dirBar\
__init__.py
Foo.py
Bar.py
Run Code Online (Sandbox Code Playgroud)
要测试Foo.py或Bar.py,我会在Foo.py和Bar.py源文件的末尾添加它:
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
并在任一源上运行Python,即
$ python Foo.py
...........
----------------------------------------------------------------------
Ran 11 tests in 2.314s
OK
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会"test.py"自动搜索dirBar以获取任何unittest派生类,并调用"unittest.main()".在实践中这样做的最佳方法是什么?
我尝试使用Python为dirBar中的每个*.py文件调用execfile,它为找到的第一个.py文件运行一次并退出调用test.py,然后我必须通过添加unittest.main()来复制我的代码每个源文件 - 违反DRY原则.
Pet*_*son 59
从Python 2.7开始,测试发现在unittest包中自动完成.来自文档:
Unittest支持简单的测试发现.为了与测试发现兼容,所有测试文件必须是可从项目的顶级目录导入的模块或包(这意味着它们的文件名必须是有效的标识符).
测试发现在实现中
TestLoader.discover()
,但也可以从命令行使用.基本命令行用法是:Run Code Online (Sandbox Code Playgroud)cd project_directory python -m unittest discover
默认情况下,它会查找名为的软件包test*.py
,但这可以更改,因此您可以使用类似的软件包
python -m unittest discover --pattern=*.py
Run Code Online (Sandbox Code Playgroud)
代替test.py脚本.
小智 30
这是我的测试发现代码,似乎可以完成这项工作.我想确保我可以轻松地扩展测试,而不必在任何涉及的文件中列出它们,但也避免在一个单独的Übertest文件中编写所有测试.
所以结构是
myTests.py
testDir\
__init__.py
testA.py
testB.py
Run Code Online (Sandbox Code Playgroud)
myTest.py看起来像这样:
import unittest
if __name__ == '__main__':
testsuite = unittest.TestLoader().discover('.')
unittest.TextTestRunner(verbosity=1).run(testsuite)
Run Code Online (Sandbox Code Playgroud)
我相信这是在一个目录中编写多个测试用例的最简单的解决方案.该解决方案需要Python 2.7或Python 3.
Pet*_*ete 27
我知道有一个明显的解决方案:
dirFoo\
__init__.py
test.py
dirBar\
__init__.py
Foo.py
Bar.py
Run Code Online (Sandbox Code Playgroud)
dirFoo/test.py的内容
from dirBar import *
import unittest
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
运行测试:
$ python test.py
...........
----------------------------------------------------------------------
Ran 11 tests in 2.305s
OK
Run Code Online (Sandbox Code Playgroud)
抱歉这个愚蠢的问题.
Cri*_*ian 19
你应该试试鼻子.它是一个帮助创建测试的库,它与unittest
或集成doctest
.您需要做的就是运行nosetests
,它将为您找到所有的单元测试.
% nosetests # finds all tests in all subdirectories
% nosetests tests/ # find all tests in the tests directory
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45672 次 |
最近记录: |