python unittest框架中addCleanup函数详解
接上一篇doCleanups说明,这次介绍下另一个很好用的函数:addCleanup
还是老规矩,看官方文档说明:
addCleanup(function, *args, **kwargs)¶
Add a function to be called after tearDown() to cleanup resources used during the test. Functions will be called in reverse order to the order they are added (LIFO). They are called with any arguments and keyword arguments passed into addCleanup() when they are added. If setUp() fails, meaning that tearDown() is not called, then any cleanup functions added will still be called. New in version 2.7.
中文解释一下:
添加针对每个测试用例执行完tearDown()方法之后的清理方法,添加进去的函数按照后进先出(LIFO)的顺序执行,要加参数进去
当然,如果setUp()方法执行失败,那么不会执行tearDown()方法,但是会执行addCleanup()里添加的函数。
那其实在实际使用时,也不会写多个函数进去。
那么,应用场景是怎么样的呢?
场景是这样的:正常的测试用例是这样的,你创建资源后,需要在用例中去进行删除资源,或者要在tearDown中进行资源清理,相当不方便,用addCleanup后,直接在用例中写入函数,在tearDown用例后,会再次调用addCleanup来删除资源,减少代码量及遗漏删除
看看一个简单实例吧
#coding:utf-8
'''
Created on 2016年8月31日
@author: huzq
'''
import unittest class my(unittest.TestCase): def delf(self,a):
print a def setUp(self):
print "setUp" def test_1(self):
'''i dont konw'''
a=''
print "test_1"
cleanups = ('bbbbb',)
self.addCleanup(self.delf,
cleanups [0]) def tearDown(self):
print 'this is tearDown' #def doCleanups(self):
# print "this is cleanups" def test_2(self):
print "test_2" @classmethod
def tearDownClass(cls):
print "teardown...." if __name__=="__main__":
test=unittest.TestSuite()
test.addTest(my('test_1'))
test.addTest(my('test_2'))
runner=unittest.TextTestRunner()
runner.run(test)
运行结果如下:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s OK
setUp
test_1
this is tearDown
bbbbb
setUp
test_2
this is tearDown
teardown....
看看红色部分,就是addCleanup的功效
后进先出的体现就是测试用例中使用了多个addCleanup时,在teardown之后执行顺序是后进先出的顺序,如下一个用例:
def test_1(self):
'''i dont konw'''
a=''
print "test_1"
#self.addCleanup(self.delf,a) cleanups = ('bbbbb',)
self.addCleanup(self.delf,
cleanups[0])
print ""
self.addCleanup(self.delf,
a)
测试结果是如下的:
test_1
2222
this is tearDown
1111
bbbbb
先执行了最后一个addCleanup,再执行倒数第二个addCleanup
如果你又加了doCleanups的话,只会执行doCleaups,不执行addCleanup
笔者有幸看到很多老外开源的框架,在代码中大量使用的addCleanup函数。大家可以借鉴
python unittest框架中addCleanup函数详解的更多相关文章
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- 【转】linux 中fork()函数详解
在看多线程的时候看到了这个函数,于是学习了下,下面文章写的通俗易懂,于是就开心的看完了,最后还是很愉快的算出了他最后一个问题. linux 中fork()函数详解 一.fork入门知识 一个进程,包括 ...
- Linux中fork()函数详解(转载)
linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...
- python中groupby函数详解(非常容易懂)
一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...
- C++中重载函数详解
函数的重载详解 什么时函数重载: 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避 ...
- 数字的可视化:python画图之散点图sactter函数详解
最近开始学习python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...
- php中magic_quotes_gpc函数详解
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊 ...
- JavaScript基础内容中的函数详解
函数 函数:即方法 函数就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值. 为什么使用函数: 1.方便调用 2.代码重用,利于维护 3.便于修改,便于重构 4.简化逻辑,利 ...
随机推荐
- 在swift中使用线程休眠
C#和php都有sleep让线程休眠指定时间后再继续执行后面的代码,swift中应该如何呢?首先,找一下objective-c版本是怎么做的 [self performSelector:@select ...
- Linux 系统磁盘满处理方法
1.使用find命令,找出占用空间较大的文件 find / -type f -size +5G —找到大于5G的文件,有work权限的情况下可以使用 find . -type f -size +1 ...
- tomcat启动时设定环境变量
在tomcat的bin目录中修改startup.bat 设置CATALINA_HOME set "CATALINA_HOME=F:\solr\apache-tomcat\apache-tom ...
- apache+tomcat集群部署笔记
前提条件 安装gcc,gcc-c++两个编译器 yum install gcc yum install gcc-c++ 接下来开始安装集群相关环境: 1.下载apr,apr-util,pcre,apa ...
- Linux静态库生成
Linux上的静态库,其实是目标文件的归档文件. 在Linux上创建静态库的步骤如下: 写源文件,通过 gcc -c xxx.c 生成目标文件. 用 ar 归档目标文件,生成静态库. 配合静态库,写一 ...
- ios开发之--UITableView中的visibleCells的用法
先上图: 具体代码如下: #import "ViewController.h" @interface ViewController ()<UITableViewDelegat ...
- vmware 安装 Mac OS X 10.9 Mavericks
This guide shows how to install fresh OS X 10.9 Mavericks on VMware workstation with Windows 7 or Wi ...
- iOS开发-UIImageView的contentMode属性
UIImageView 的contentMode这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定:UIViewContentModeScaleToFillUIView ...
- STL——空间配置器(SGI-STL)
一. 空间配置器标准接口 参见<STL源码剖析>第二章-2.1.<memory>文件. 二.具备次配置力的SGI空间配置器 1. SGI STL的配置器与众不同,也与标准规范不 ...
- openjdk源码阅读导航
转自:http://rednaxelafx.iteye.com/blog/1549577 这是链接帖.主体内容都在各链接中. 怕放草稿箱里过会儿又坑掉了,总之先发出来再说…回头再慢慢补充内容. 先把I ...