47

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

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

我想

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

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

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

  2. 我还尝试在执行此操作的目录中有一个脚本:

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

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

4

3 回答 3

73

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

  1. 确保所有文件/目录都以test. 不要使用,因为它不是有效的 Python 模块名称test-something.py使用test_something.py.

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

  3. 所有类测试用例定义都必须是扩展unittest.TestCase的。例如,

    class DataFormatTests(unittest.TestCase)
    
  4. 所有测试用例方法定义必须以test_

     def test_data_format(self):
    
于 2011-07-13T00:35:46.847 回答
55

发现测试后,您可以使用测试运行程序运行它们。

对于 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)

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

于 2011-12-01T00:40:50.390 回答
26

鉴于您尝试unittest2从 Python 上的命令行使用< 2.7,我认为您可能错过了PyPI 页面上的注释unittest2

笔记

命令行使用

在 Python 2.7 中,您可以使用python -m unittest <args>. 由于 unittest 是一个包,并且调用包的功能 python -m ...是 Python 2.7 中的新功能,因此我们不能对 unittest2 执行此操作。

相反,unittest2 带有一个脚本 unit2。命令行用法:

unit2 discover unit2 -v test_module

还有一个名为 的脚本的副本unit2.py,对于使用文件扩展名而不是 shebang 行来确定执行文件的程序的 Windows 很有用。这两个脚本都是由 distutils 安装的。

尝试使用unit2本笔记推荐的脚本作为旧版 Python 的替代方案,以替代 Python 2.7 的“将包作为主脚本运行”功能。如果您愿意的话,也许它的来源也可以用来准确地找出如何从您自己的代码中发现和运行测试。

于 2010-07-21T01:16:49.833 回答