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

问题描述 投票:0回答:1

我在用:

我知道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

这将运行TestCase目录中的所有/testss并生成输出(在控制台中),如下所示:

......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,但它没有做到这一点。
python python-3.x python-2.7 unit-testing python-unittest
1个回答
0
投票

好吧,as is it sometimes happens,我想出了我自己的问题的答案。实际上,这是一个answer to another question,让我知道我错过了什么。


我发现,答案是:

  1. 控制台输出的第二部分: ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK 指的是当前模块中的测试(即已运行的文件),在本例中为suite.py。由于文件本身不包含TestCases,因此输出为“空白”(可以很容易地验证:创建一个空文件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 ...输出。
© www.soinside.com 2019 - 2024. All rights reserved.