2010-07-21 88 views
31

我已目录,其中包含文件命名,如: test_foo.pyPython的单元测试和发现

每个文件都是一个测试用例。

我想

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

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

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

2)我也试过在我做这个目录有一个脚本:

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

如果我打印t变量,我可以看到我的测试案例,但是从文档我想不通一旦我拥有它,我会怎样处理加载器对象。

回答

23

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

命令行模式

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

取而代之的是unittest2带有一个脚本 unit2。命令行用法:

unit2 discover unit2 -v test_module 

还有这个脚本 叫unit2.py,对于Windows 有用的,它使用的文件扩展名,而不是 家当线,以确定哪些 程序与执行文件的副本。这两个脚本均由 distutils安装。

您是否尝试过unit2脚本,本笔记建议将Python 2.7作为“运行包作为主脚本”功能的替代方案?也许它的来源也可能有助于准确找出如何从你自己的代码中发现和运行测试,如果这是你想要做的。

+0

谢谢亚历克斯!我错过了那个笔记。现在它起作用了。你用过鼻子吗?你推荐它吗? 伟大的书籍btw,感谢他们的写作。 – Aaron 2010-07-21 17:10:52

+0

@Aaron,不客气!是的,我过去很喜欢用鼻子(我还不知道用新的单元测试功能是否会替换或补充它 - 我不是那么熟悉后者!)。 – 2010-07-21 18:37:35

42

运行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) 
    
+0

有没有办法使用unittest发现来添加引导脚本? – 010110110101 2011-09-16 00:45:40

+0

也有方法名,例如'test_does_something(self):' – 2016-01-12 11:49:28

+1

对我来说,创建'tests/__ init __。py'解决了这个问题。 – gzc 2017-01-07 11:41:37

47

一旦发现测试,您可以用测试运行运行它们。

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

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

+10

这是我正在寻找的人,也是最原始问题的最直接答案。虽然在2.7中看起来略有不同, 'test_loader = unittest.defaultTestLoader.discover('。')';那么'test_runner = unittest.TextTestRunner()';然后'test_runner.run(test_loader)',你很好。 – Paul 2012-04-17 13:15:17

+3

如果您需要以编程方式调用测试运行程序,例如从自定义脚本或“Command”实例中说,这是推荐的方法。 – 2013-06-21 07:03:44