分类目录:《》总目录
在《单元测试unittest:框架结构》中我们了解到unittest
框架共包含4种测试固件。
setUp
:在每个测试方法执行前执行,负责测试前的初始化工作。tearDown
:在每个测试方法结束后执行,负责测试后的清理工作。setUpClass
:在所有测试方法执行前执行,负责单元测试前期准备。必须使用@classmethod
装饰器进行修饰,在setUp
函数之前执行,整个测试过程只执行一次。tearDownClass
:在所有测试方法执行结束后执行,负责单元测试后期处理。必须使用@classmethod
装饰器进行修饰,在tearDown
函数之后执行,整个测试过程只执行一次。
测试固件本身就是一个函数,和测试用例分别负责不同的工作。测试固件和测试用例更多的区别在于其在整个class
中的执行次序和规律不同。接下来,我们通过一个示例来看一下上述4种测试固件执行的次序:
import unittest
class MyTestClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('setUpClass')
def setUp(self):
print('setUp')
def test_first(self):
print('first')
self.assertEqual('hy592070616', 'hy592070616')
def test_second(self):
print('second')
self.assertEqual('machinelearning', 'machinelearning')
def tearDown(self):
print('tearDown')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
if __name__ == '__main__':
unittest.main()
执行结果如下:
Ran 2 tests in 0.000s
OK
setUpClass
setUp
first
tearDown
setUp
second
tearDown
tearDownClass
Process finished with exit code 0
根据上述结果,我们可以看到这4种测试固件的执行顺序。首先执行setUpClass
,整个class
只执行一遍。其次执行setUp
,第一个测试用例调用,并执行第一个测试用例,接着执行tearDown
,第一个测试用例调用。然后执行setUp
,第二个测试用例调用,并执行第二个测试用例,接着执行tearDown
,第二个测试用例调用。最后执行tearDownClass
,整个class
只执行一遍。至此,整个class
执行结束。