我在用:
我知道nose或py.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
目录中的所有/tests
s并生成输出(在控制台中),如下所示:
......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
问题是:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
就是指的是(为什么会有)?python -m unittest -v
时相同)?我曾尝试过python -m unittest -v tests/suite.py
,但它没有做到这一点。好吧,as is it sometimes happens,我想出了我自己的问题的答案。实际上,这是一个answer to another question,让我知道我错过了什么。
我发现,答案是:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
指的是当前模块中的测试(即已运行的文件),在本例中为suite.py
。由于文件本身不包含TestCase
s,因此输出为“空白”(可以很容易地验证:创建一个空文件test.py
,然后将其作为python -m unittest tests/test.py
启动 - 您将看到与上面完全相同的输出)。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 ...
输出。