2 unittest基本用法
我们通过最简单的例子来看一下unittest的基本用法
import unittest
class Test(unittest.TestCase):
def setUp(self):
print('hello')
def tearDown(self):
print('bye')
def test_001(self):
print('001')
def test_002(self):
print('002')
def test_003(self):
print('003')
def func(self):
print('func')
if __name__ == '__main__':
unittest.main()
解释一下关键点:
- 可以通过继承unittest.TestCase类来定义我们自己的测试用例,1个测试用例类下面可以有多个测试方法(test)或者叫做测试点
- 测试用例中方法名以test开头的方法才是测试方法,比如上面的例子里定义了3个以test开头的方法,分别是test_001,test_002和test_003。非测试方法是不会被test runner执行的
- setUp和tearDown这两个方法,这两个方法在测试方法执行前后会被自动调用,主要用作预处理和清理。这两个方法就是我们说的test fixture
- 通过上面的测试代码我们可以看到,在调用uniitest.main()的时候,框架自动的调用了Test类,因为Test继承自unittest.TesetCase类,所以会被框架识别为测试用例,
- 最后, unittest.main提供了最简单的运行用例的方式。
当我们从命令行运行上面的代码时,我们可以看到如下的输出
001
002
003
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
除了使用unittest.main,还有其他的方式可以运行测试用例,比如把最后2行替换为
# 创建一个测试套件,并向其中加载测试用例
suite = unittest.TestLoader().loadTestsFromTestCase(Test)
# 显式运行测试没并且通过设置verbosity设定对每一个测试方法产生测试结果
unittest.TextTestRunner(verbosity=2).run(suite)
运行用例,结果将会如下所示
001
002
003
test_001 (__main__.Test) ... ok
test_002 (__main__.Test) ... ok
test_003 (__main__.Test) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK