Python单元测试和发现
我有目录,其中包含的文件名如下:Python单元测试和发现,python,unit-testing,discovery,Python,Unit Testing,Discovery,我有目录,其中包含的文件名如下: test\u foo.py 每个文件都是一个测试用例 我想 从命令行运行目录中的所有测试。我使用的是unittest2,因为我们运行的是Python 2.5.1。从其中一个目录中,我尝试在命令行中键入: python -m unittest2 discover -p 'test_*.py' 还有几个不同的变种。我没有出错,但什么也没发生。我希望该目录中所有测试用例中的所有测试都能运行并获得结果 我还尝试在执行此操作的目录中使用脚本: loader = u
test\u foo.py
每个文件都是一个测试用例
我想
unittest2
,因为我们运行的是Python 2.5.1。从其中一个目录中,我尝试在命令行中键入:
python -m unittest2 discover -p 'test_*.py'
还有几个不同的变种。我没有出错,但什么也没发生。我希望该目录中所有测试用例中的所有测试都能运行并获得结果
loader = unittest2.TestLoader()
t = loader.discover('.')
如果我打印t
变量,我可以看到我的测试用例,但是从文档中,我不知道一旦我有了它,该如何处理loader对象
鉴于您试图在Python
<2.7
上从命令行使用unittest2
,我认为您可能错过了:
注
命令行使用
在Python2.7中,调用unittest
命令行功能(包括测试)
使用python-m unittest
发现。因为unittest是一个包
使用
python-m…
在python2.7中是新的,我们
无法为unittest2执行此操作
相反,unittest2附带了一个脚本
第二单元。命令行用法:
unit2 discover unit2 -v test_module
还有这个脚本的副本
名为unit2.py
,对Windows很有用
它使用文件扩展名而不是
射棒线要确定什么
用于执行文件的程序。两者
这些脚本由安装
distutils
尝试一下
unit2
脚本,本说明建议将其作为Python 2.7的“以主脚本形式运行包”功能的替代方案。如果您愿意这样做的话,那么它的源代码也可能有助于了解如何从自己的代码中发现和运行测试。我在运行python-m unittest discover
时遇到了同样的问题。这里有一个很好的清单来验证您的设置Nose
对于允许的配置更灵活,但不一定更好
test
开头。不要使用test something.py
,因为这不是有效的Python模块名称。使用测试某物.py
test/
),请确保创建一个test/\uuuu init\uuuuu.py
文件,以便python将该目录视为一个包
unittest.TestCase
。比如说,
class DataFormatTests(unittest.TestCase)
一旦发现测试,就可以使用测试运行程序运行它们 对于Python 2:
import unittest2
loader = unittest2.TestLoader()
tests = loader.discover('.')
testRunner = unittest2.runner.TextTestRunner()
testRunner.run(tests)
对于Python 3:
import unittest
loader = unittest.TestLoader()
tests = loader.discover('.')
testRunner = unittest.runner.TextTestRunner()
testRunner.run(tests)
运行上述代码将把测试结果打印到标准输出。谢谢Alex!我错过了那张纸条。现在它开始工作了。你用过鼻子吗?你推荐它吗?非常好的书,顺便说一句,谢谢你写这些书。@Aaron,不客气!是的,我过去很高兴使用过nose(我还不知道我是否会用新的unittest功能替换或补充它——我还不太熟悉后者!)。有没有办法用unittest discover添加引导脚本?还有方法名,即
test\u做些什么(自己):
为我,创建tests/\uuuuu init\uuuuu.py
解决了这个问题。这是我一直在寻找的问题,也是对原始问题最直接的答案。但在2.7版本中看起来略有不同test_loader=unittest.defaultTestLoader.discover('.')
;然后test\u runner=unittest.TextTestRunner()
;然后test\u runner.run(test\u loader)
就可以了。如果您需要以编程方式调用测试运行程序,例如从自定义脚本或命令
实例调用测试运行程序,建议使用这种方法。