Python单元测试和发现

时间:2010-07-21 00:13:54

标签: python unit-testing discovery

我有目录,其中包含名为的文件: test_foo.py

每个文件都是测试用例。

我想

1)从命令行运行目录中的所有测试。我正在使用unittest2,因为我们正在运行Python 2.5.1。从其中一个目录我尝试在命令行输入:

python -m unittest2 discover -p 'test_*.py'

和几种不同的变种。我没有错,但没有任何反应。我期待该目录中所有测试用例中的所有测试都能运行并获得结果。

2)我也尝试在我执行此操作的目录中使用脚本:

loader = unittest2.TestLoader()
t = loader.discover('.')

如果我打印t变量,我可以看到我的测试用例,但是从文档中我无法弄清楚一旦有了它就可以用于加载器对象。

3 个答案:

答案 0 :(得分:51)

我在运行python -m unittest discover时遇到了同样的问题。这是一个很好的检查清单,用于验证您的设置。 Nose对于允许的配置更灵活,但不一定更好。

  1. 确保所有文件/目录都以test开头。 使用test-something.py,因为那不是有效的python模块名称。使用test_something.py

  2. 如果要将测试放在子目录(例如test/)中,请确保创建test/__init__.py文件,以便python将目录视为包。

  3. 所有类测试用例定义必须扩展为unittest.TestCase。例如

    class DataFormatTests(unittest.TestCase)
    

答案 1 :(得分:47)

一旦发现了测试,就可以使用测试运行器运行它们。

import unittest2
loader = unittest2.TestLoader()
tests = loader.discover('.')
testRunner = unittest2.runner.TextTestRunner()
testRunner.run(tests)

运行上面的代码会将测试结果打印到标准输出。

答案 2 :(得分:23)

说明如何在Python unittest2的命令行中尝试使用< 2.7,我想您可能错过了the note on the unittest2 PyPI page

  

请注意

     

命令行用法

     

在Python 2.7中,您调用unittest   命令行功能(包括测试   发现python -m unittest <args>。由于unittest是一个包,并且   能够使用调用包   python -m ...是Python 2.7中的新功能,我们   不能为unittest2做到这一点。

     

而是unittest2附带一个脚本   单元2。命令行用法:

unit2 discover unit2 -v test_module
     

还有此脚本的副本   名为unit2.py,对Windows很有用   它使用文件扩展而不是   shebang线确定什么   用于执行文件的程序。两者的   这些脚本是由安装的   的distutils。

您是否尝试过本说明推荐的unit2脚本作为旧版Pythons的替代方案,以及Python 2.7的“运行包作为主脚本”功能?也许它的来源也可能有助于找出如何从您自己的代码中发现并运行测试,如果这是您更愿意做的事情。