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

时间:2019-03-28 06:48:51

标签: python python-3.x python-2.7 unit-testing python-unittest

我正在使用:

我知道nosepy.test比普通单元测试提供了更多的可能性。不过,这里的目标是坚持当前的环境。


我的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. 如何从运行套件中获取详细的输出(即,每个测试的状态,与从项目根目录运行python -m unittest -v时的状态一样)?我已经尝试过python -m unittest -v tests/suite.py,但不能解决问题。

1 个答案:

答案 0 :(得分:0)

好吧,as is it sometimes happens,我想出了自己的问题的答案。实际上,这是一个answer to another question,让我对自己的失踪有所了解。


我发现的答案是:

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

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

    是指当前模块(即已运行的文件)中的测试,在这种情况下为suite.py。由于文件本身不包含TestCase,因此输出为“空白”(可以很容易地验证:创建一个空文件test.py,然后以python -m unittest tests/test.py启动它-您将看到与上面的输出完全相同。)

  2. 为了从TestSuite运行中获取详细的输出,必须将TestSuite的创建包装在一个方法中(该方法返回创建的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 ...输出。