本文是对Python自带的unittest框架学习笔记的入门篇,简单介绍PyUnit框架的基础知识。
待测试的目标类
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->#!/usr/bin/python
#coding=utf-8
classWidget:
def__init__(self,size=(40,40)):
self._size=size
defgetSize(self):
returnself._size
defresize(self,width,height):
ifwidth<0orheight<0:
raiseValueError,"illegalsize"
self._size=(width,height)
def__del__(self):
print"widgetdisposenow"
测试用例类
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->#!/usr/bin/python
#coding=utf-8
fromwidgetimportWidget
importunittest
importsys
reload(sys)
sys.setdefaultencoding('utf8')
classWidgetTestCase(unittest.TestCase):
defsetUp(self):
print"setUp"
self.widget=Widget()
deftearDown(self):
print"tearDown"
self.widget=None
deftestSize(self):
self.assertEqual(self.widget.getSize(),(40,40))
deftestResize(self):
self.widget.resize(30,30)
self.assertEqual(self.widget.getSize(),(30,30))
if__name__=="__main__":
unittest.main()
1)用import语句引入unittest模块。
2)让所有执行测试的类都继承于TestCase类,这个类包含了对目标类进行测试的方法的集合。
3)在setUp()方法中进行测试前的初始化工作,并在tearDown()方法中执行测试后的清除工作,setUp()和tearDown()都是TestCase类中定义的方法。
4)在testSize()中调用assertEqual()方法,对Widget类中getSize()方法的返回值和预期值进行比较,确保两者是相等的,assertEqual()也是TestCase类中定义的方法。
5)提供名为suite()的全局方法,PyUnit在执行测试的过程调用suit()方法来确定有多少个测试用例需要被执行,可以将TestSuite看成是包含所有测试用例的一个容器。
6)在创建TestCase子类的实例时必须给出测试方法的名称,来为PyUnit测试框架指明运行该测试用例时究竟应该调用测试类中的哪个方法。
7)相关的测试用例称为一个测试用例集,在PyUnit中是用TestSuite类来表示的。PyUnit测试框架允许在单元测试代码中定义一个名为suite()的全局函数,并将其作为整个单元测试的入口,PyUnit通过调用它来完成整个测试过程。
8)PyUnit使用TestRunner类作为测试用例的基本执行环境,来驱动整个单元测试过程。我们一般不直接使用TestRunner类,而是使用其子类TextTestRunner来完成测试,并将测试结果以文本方式显示出来。
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->runner=unittest.TextTestRunner()
runner.run(suite())
默认情况下,TextTestRunner将结果输出到sys.stderr上,但如果在创建TextTestRunner类实例时将一个文件对象传递给了构造函数,则输出结果将被重定向到该文件中。
logFile=open(test_log_path,"w")
runner=unittest.TextTestRunner(logFile)
runner.run(suite())
几个注意的地方:
1)对于每一个test**的测试方法,PyUnit都会为其单独执行一遍完整的测试流程,即从setUp到tearDown,两个test**方法之间实际上是独立的。
2)对于测试用例集,我们也可以直接定义一个TestSuite的子类,并在其初始化方法(__init__)中完成所有测试用例的添加,这样只需要在suite()方法中返回该类的一个实例就可以了。
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->classWidgetTestSuite(unittest.TestSuite):
def__init__(self):
unittest.TestSuite.__init__(self,map(WidgetTestCase,
("testSize",
"testResize")))
defsuite():
returnWidgetTestSuite()
如果用于测试类中所有测试方法都以test开头,我们甚至可以用PyUnit模块提供的makeSuite()方法来构造一个TestSuite:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->defsuite():
returnunittest.makeSuite(WidgetTestCase,"test")
这样,相对应的可以用:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->if__name__=="__main__":
unittest.main(defaultTest='suite')
3)
PyUnit模块中定义了一个名为main的全局方法,使用它可以很方便地将一个单元测试模块变成可以直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中的测试方法,并自动执行它们。如果都是以test开头来命名所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可:
if__name__=="__main__":
unittest.main()
4) 测试类WidgetTestCase中的所有测试方法都将被自动执行,但如果只想执行testSize()方法,可以使用如下命令:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->pythontest1.pyWidgetTestCase.testSize
分享到:
相关推荐
每日学习笔记11111111111111
JS学习笔记
已整理好基础版和高级版笔记 导出为pdf 和html 格式 界面清晰美观,均有详细目录
每日更新机器学习笔记、代码及其它内容。.zip
Study Notes日常学习笔记记录推荐使用打开Markdown简单Markdown语法整理初版日期:2021-3-28Allegro creat Gerber filesCreated date:2021-4-4GitCreated date:2021-4-4
spring学习笔记 很详细的学习笔记分享给大家,大家可以看看,绝对物有所值
stone的终身学习笔记 前言 09年 渣3本毕业,金融危机 09~10年 跑业务打杂工养活自己 10~12年 私企,企业资源管理ERP(VF、VB) 12~17年 国企,企业办公自动化OA(.NET、JavaScript) 17~20年 阿里影业,影城售票系统...
MLDL 研究生预备知识学习笔记,包含李宏毅深度学习与数字图像处理。 深度学习笔记在基础上添加自己的理解,纯自用。 MLDnotes 深度学习笔记 papernotes 论文笔记与相关知识 plans 每日计划
javascript_study 每日代码汇总,学习笔记及页面仓库
机器学习课程笔记完整版 机器学习 目录 机器学习算法课程定位、目标 定位 课程以算法、案例为驱动的学习,伴随浅显易懂的数学知识 作为人工智能领域(数据挖掘/机器学习方向)的提升课程,掌握更深更有效的解决...
此笔记为作者在有java基础的前提下,自学B站马士兵python视频所记,内容简洁方便看完视频后日后回顾,也适合自学B站马士兵python视频每日回顾。
学习英语需要积累每日一句,多多练习,多多积累,多多交流
每日英语词典 1-3期知识点 笔记 《Daily English Dictation》第1-3期知识点 1、(无听力讲解) 2、(讲解看截图)
这本书在我学习seo的过程中帮助很大,学到了很多的有用信息
算法学习笔记 通过leetcode的每日打卡,熟悉的分类算法;记录下学习过的算法题,整理成markdwn文本;并根据打卡情况制定计划,着重学习自己很难甚至没有理解的算法。习惯用Jupyter Notebook进行学习,刚好notebook...
Collection学习笔记Collection集合概述Collection集合常用方法Collection集合的遍历(迭代器)集合的使用样例 Collection集合概述 是单例集合的顶层接口 它提供了更具体的子接口的实现,如set和list. Collection集合...
每日一学 字典查找类似hash表,速度远超过for遍历列表。 for index,value in enumerate(s): .get函数两个参数时,第二个应重新字典引用,见下面使用方法 arabic += ara_rom_dict.get(s[index-1:index+1],ara_rom_...
目录 算法 每日更新 计算机操作系统 数据结构 前端工具 组件库 功能库 javascript React 打字稿 实用程序 emacs 吉特 多路复用器
在Hacktiv8的全栈新手训练营期间,进行个人学习笔记(每日挑战,实时代码等)。 工具: 文本编辑器:Visual Studio Code 终端机:Git bash,MacOS终端机,iTerm 版本控制:Git 回购经理:Github 包管理器:NPM...
CDGA学习笔记就是所有知识点的总结,按章节划分,有利于建立属于自己的数据知识体系, 重点语境图我也都截出来了,可直接打印,进行背诵, 最后是DAMA视频精讲资料。 这次可谓史上最全资料,实际学习过程中可以选择...