接上一篇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函数详解的更多相关文章

  1. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  2. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  3. 【转】linux 中fork()函数详解

    在看多线程的时候看到了这个函数,于是学习了下,下面文章写的通俗易懂,于是就开心的看完了,最后还是很愉快的算出了他最后一个问题. linux 中fork()函数详解 一.fork入门知识 一个进程,包括 ...

  4. Linux中fork()函数详解(转载)

    linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  5. python中groupby函数详解(非常容易懂)

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...

  6. C++中重载函数详解

    函数的重载详解 什么时函数重载: 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避 ...

  7. 数字的可视化:python画图之散点图sactter函数详解

    最近开始学习python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  8. php中magic_quotes_gpc函数详解

    magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊 ...

  9. JavaScript基础内容中的函数详解

    函数 函数:即方法 函数就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值. 为什么使用函数: 1.方便调用 2.代码重用,利于维护 3.便于修改,便于重构 4.简化逻辑,利 ...

随机推荐

  1. Kafka监控工具KafkaOffsetMonitor配置及使用

    转载:https://www.cnblogs.com/dadonggg/p/8242682.html jar包下载地址 KafkaOffsetMonitor托管在Github上,可以通过Github下 ...

  2. javascript 以“年-月-日 时:分:秒”格式显示当前时间

    运行代码 /** * Created by shgbit on 2015/1/9. *js代码 */ function showNow(){ var t=new Date();    var mont ...

  3. Django 创建第一个项目

    创建项目: [root@localhost ~]$ django-admin.py startproject web # web是项目名 [root@localhost ~]$ tree web/ w ...

  4. 第五篇:Hadoop流

    前言 Hadoop流提供了一个API,允许用户使用任何脚本语言编写Map函数或Reduce函数. 本文对此知识点进行介绍. Hadoop流的工作原理 在以前的例子中,Map和Reduce工作都是由类来 ...

  5. 发送http请求

    public static String httpGetSend(String url) { String responseMsg = ""; HttpClient httpCli ...

  6. Push rejected: Push master to origin/master was rejected /failed to push some refs to /git did not exit cleanly

    用studio提交代码报 Push rejected: Push master to origin/master was rejected 用TortiuseGit提交代码报下面错,(我是用这种方法解 ...

  7. mysql学习笔记(三)

    -- 主键冲突(duplicate key) ,'xujian','anhui'); ,'xiewei','anhui'); ,'luyang','anhui');-- 主键冲突了 -- 可以选择性的 ...

  8. 关于丢失或者损坏/etc/fstab文件后的一些探讨

    1.模仿,假设不小心删除了/etc/fstab文件:大家都知道,Linux系统启动的时候会读取该文件来挂载分区,如果缺失该文件,系统一般不能正常启动. 2.采用reboot命令或者alt+ctrl+d ...

  9. pom.xml文件错误

    刚创建的maven项目,马上pom.xml的第一行就报错这是第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

  10. VC利用调试寄存器实现硬件断点源码

    [文章标题]:VC利用调试寄存器实现硬件断点源码 [文章作者]:yhswwr(SilenceRet) [作者QQ]:3412259 [编写语言]:C++ [使用工具]:VS2008.VC++9 [本文 ...