在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:
setUpModule
tearDownModule
顾名思义,是在Module的前后运行的。在我实际TDD开发中不需要用到这种情况。
以前我有个误区,把
setUp
和tearDown
当做setUpClass
和tearDownClass
在使用,会导致:
- 逻辑不是自己期望
- 由于每次Fixture的组织需要耗费一定的时间,当test method多了后,这些累计的小时间也会变成一段比较长的时间
参考资料
碧云涛本文作者: Yarving Liu
文章地址:https://mp.weixin.qq.com/s/rmNM55Wn1R35c2oMa5ntpg
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
网友评论