Test Fixtures: setUp|setUpClass|
2020-05-22 本文已影响0人
yarving
python
在TDD开发实践中,组织测试用例是一个最基本的内容,本文介绍下测试用例组织时的Fixture
TestCase级别的test fixture有四种,分别为(按顺序执行):
-
setUpClass: 必须使用@classmethod 装饰器, 每个test class执行前运行一次 -
setUp: 每个test method执行前运行一次 -
tearDown: 每个test method执行后运行一次 -
tearDownClass: 必须使用@classmethod 装饰器, 每个tear class执行后运行一次
常见的TestCase的组织形式如下:
class DemoTest(models.Model):
"""Test Demo"""
@classmethod
def setUpClass(cls):
print("1. setup class")
def setUp(self):
print("2. setup method")
def tearDown(self):
print("5. tear down method")
@classmethod
def tearDownClass(cls):
print("6. tear down class")
def test_1(self):
print("3. run test case 1")
def test_2(self):
print("4. run test case 2")
如果执行上述代码,则运行结果为:
1. setup class
2. setup method
3. run test case 1
5. tear down method
2. setup method
4. run test case 2
5. tear down method
6. tear down class
说明:
-
setUpClass和tearDownClass分别在DemoTest的首位进行一次,在实践中,我们可以把整个TestCase中不变的数据放在setUpClass去准备,放在tearDownClass中去销毁 -
setUp和tearDown会在每个test method执行前后运行,可以把各个teat method的被测试对象放入这两个部分,分别进行创建和销毁。
比如,要测试某个Model:
- 在
setUpClass和tearDownClass中分别对该model的依赖(PrimaryKey)等进行创建和销毁; - 在
setUp和tearDown创建该Model的instance - 在每个test method对model的属性进行测试
扩展阅读
除了上述四种外,还有两种Module Fixture:
setUpModuletearDownModule
顾名思义,是在Module的前后运行的。在我实际TDD开发中不需要用到这种情况。
以前我有个误区,把
setUp和tearDown当做setUpClass和tearDownClass在使用,会导致:
- 逻辑不是自己期望
- 由于每次Fixture的组织需要耗费一定的时间,当test method多了后,这些累计的小时间也会变成一段比较长的时间
参考资料
本文作者: Yarving Liu
文章地址:https://mp.weixin.qq.com/s/rmNM55Wn1R35c2oMa5ntpg
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
碧云涛