如何使用 -v 标志 运行 Python 的 unittest.TestSuite()?

How to run Python's unittest.TestSuite() with -v flag?

我正在使用:

我知道 nose or py.test 提供了比普通单元测试更多的可能性。不过,这里的objective是为了坚持现在的环境。


我的 suite.py 文件位于 /tests 目录中,如下所示:

import unittest

loader = unittest.TestLoader()
suite = loader.discover('.')

runner = unittest.TextTestRunner()
runner.run(suite)

我 运行 它(从项目的根目录)是这样的:

python -m unittest tests/suite.py

这 运行 是 /tests 目录中的所有 TestCase 并产生如下输出(在控制台中):

......ss....s............s.....s.s....s.....................s....ss.....s......s......s..........s...........s.....s.....s....s
----------------------------------------------------------------------
Ran 117 tests in 54.110s

OK (skipped=13)

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

问题是:

  1. 输出什么第二部分

    ----------------------------------------------------------------------
    Ran 0 tests in 0.000s
    
    OK
    

    也就是说,指的是(为什么它在那里)?

  2. 如何从 运行ning 套件中获取详细输出(即每个测试的状态,与 运行ning python -m unittest -v 从项目的根目录中一样)?我试过 python -m unittest -v tests/suite.py,但没有成功。

嗯,as is it sometimes happens, I figured out an answer to my own question.It was an answer to another question,实际上,这让我知道我错过了什么。


我发现的答案是:

  1. 控制台输出的第二部分:

    ----------------------------------------------------------------------
    Ran 0 tests in 0.000s
    
    OK
    

    指的是当前模块中的测试(即 运行 的文件),在本例中为 suite.py。由于文件本身不包含 TestCase,因此输出为 'blank'(可以很容易地验证:创建一个空文件 test.py,然后将其作为 python -m unittest tests/test.py 启动——你将看到与上面完全相同的输出。

  2. 为了从 TestSuite 运行 获得详细的输出 — TestSuite 的创建必须包含在一个方法中(returns创建的 TestSuite) 然后不是模块,但必须将方法传递给 python -m unittest -v
    因此,suite.py 必须更改为:

    import unittest
    
    def suite():
        loader = unittest.TestLoader()
        suite = loader.discover('.')
        return suite
    

    然后应该通过 python -m unittest -v tests.suite.suite 启动它,这会给出每个测试的详细状态并避免不必要的 ... Ran 0 tests in 0.000s ... 输出。