python怎么测试函数_快学Python:如何测试函数与类
编写代码离不开写测试,只有通过测试才知道代码的逻辑有没有问题,健壮性好不好等,测试让你深信,即便有越来越多的人使用你的程序,它也能一如既往正确地工作。
1.测试函数
Python标准库中的模块unittest提供了代码测试工具。要进行相关测试,一定要要有待测试的函数,创建文件name_function.py,其内容如下:
def get_formatted_name(first,last,middle = ''):"""生成整洁的姓名"""if middle:full_name = f"{first} {middle} {last}"else:full_name = f"{first} {last}"return full_name.title()
1.1单元测试和测试用例
1)单元测试
用于核实某个函数的某个方面没有问题。
2)测试用例
是一组单元测试,它们一起核实函数在各种情况下的行为都符合要求。
3)全覆盖测试
测试用例包含一整套单元测试,涵盖了各种可能函数使用的方式。
1.2可通过的测试
import unittestfrom name_function import get_formatted_nameclass NamesTestCase(unittest.TestCase):"""Test the name_function.py"""def test_first_last_name(self):"""能够正确处理姓名吗?"""formatted_name = get_formatted_name('sun','wukong')self.assertEqual(formatted_name,'Sun Wukong')if __name__ == '__main__':unittest.main()
运行上面测试用例,运行结果:
.----------------------------------------------------------------------Ran 1 test in 0.000sOK
1.3未通过的测试
为通过测试很容易,将待测试的函数稍微修改下:
def get_formatted_name(first,last,middle = ''):"""生成整洁的姓名"""full_name = f"{first} {middle} {last}"return full_name.title()
运行1.2中的测试用例,则会输出为通过的测试返回。笔者不再尝试。
1.4添加新测试
import unittestfrom name_function import get_formatted_nameclass NamesTestCase(unittest.TestCase):"""Test the name_function.py"""def test_first_last_name(self):"""能够正确处理姓名吗?"""formatted_name = get_formatted_name('sun','wukong')self.assertEqual(formatted_name,'Sun Wukong')def test_first_last_middle_name(self):"""测试三个名字"""formatted_name = get_formatted_name('sun','wu','kong')self.assertEqual(formatted_name,'Sun Kong Wu')if __name__ == '__main__':unittest.main()
运行结果:
..----------------------------------------------------------------------Ran 2 tests in 0.000sOK
2.测试类
2.1各种断言方法
Python在unittest.TestCase类中提供了很多断言方法。下面列举几个常用的断言方法。 方法用途assertEqual(a,b)核实a == b
assertNotEqual(a,b)核实a != b
assertTrue(x)核实x为True
assertFalse(x)核实x为False
assertIn(item,list)核实item在list中
assertNotIn(item,list)核实item不在list中
2.2一个要测试的类
类的测试与函数的测试相似,类的测试基本上都是对方法的测试,不过也存在一些不同之处,下面创建一个匿名调查类来进行测试。
class AnonymousServey:"""收集匿名调查问卷的答案"""def __init__(self,question):"""存储一个问题,并为存储答案做好准备"""self.question = questionself.responses = []def show_question(self):"""显示调查问卷"""print(self.question)def store_response(self,new_response):"""存储单份问卷调查"""self.responses.append(new_response)def show_result(self):"""显示收集到的所有答案"""print("Survey results:")for response in self.responses:print(f"- {response}")
下面编写一个测试,对AnonymousServey类的行为一个方面进行验证:核实答案列表中是否有指定答案。
import unittestfrom survey import AnonymousServeyclass TestAnonymousServey(unittest.TestCase):"""针对AnonymousServey进行测试"""def test_store_single_response(self):question = "What language did you first learn to speak?"self.my_survey = AnonymousServey(question)self.my_survey.store_response('python')self.assertIn('python',self.my_survey.responses)if __name__ == '__main__':unittest.main()
上面的测试类先导入unittest和要测试的AnonymousServey,测试调查问卷的被存储后,测试指定数据是否包含在存储的列表中。我们还可以添加更多维度的测试case,例如测试指定某列表是否包含在存储的列表中。
2.3方法setUp()
如果继续添加测试方法,会有很多重复,如何让公共的变量或者测试数据,在用例执行前就能声明好,而且其他方法都可以公用,如何解决呢?可以使用setUp()函数。结合上面的测试用例,看看如何使用setUp()函数
import unittestfrom survey import AnonymousServeyclass TestAnonymousServey(unittest.TestCase):"""针对AnonymousServey进行测试"""def setUp(self):"""创建一个调查对象和一组答案,供测试方法使用"""question = "What language did you first learn to speak?"self.my_survey = AnonymousServey(question)self.tree_responses = ['java','php','python']def test_store_single_response(self):self.my_survey.store_response(self.tree_responses[0])self.assertIn(self.tree_responses[0],self.my_survey.responses)def test_store_tree_response(self):for response in self.tree_responses:self.my_survey.store_response(response)for response in self.tree_responses:self.assertIn(response,self.my_survey.responses)if __name__ == '__main__':unittest.main()
方法setUp()做了两件事:创建一个调查对象,以及创建一个答案列表。存储这两样东西的变量名包含前缀self(即存储在属性中),因此可以类的任何地方进行使用。
注意:单元测试对于一个程序的健壮形特别重要。但是要想要自己的单元测试覆盖自己所写的每个方法,每一行却不是很容易,需要各种条件的设置,对于第三方的调用还可以使用Mock方式进行,此是后话了。
python怎么测试函数_快学Python:如何测试函数与类相关推荐
- python判断素数_小白学Python | 你还在说你入不了门吗
收藏的好多啊 原创不易,动动小手,点个赞啦!! 十二月份,天气有时候会很阴沉,一天都见不到太阳.气温也慢慢变冷了,晚上回家还是会感觉到衣服穿少了. 阴阴沉沉总会过去的,我还是期待阳春三月. 2019年 ...
- 新手学python书籍推荐_新手学python看哪本书
对于零基础入门的人来说,对于Python的学习还是有点懵懵懂懂的,如果有一些书籍先看看来引导,学起来难度也会减低很多!所以,学python倒是向大家推荐这些书籍! 1.<PYTHON基础教程(第 ...
- 只会python怎么挣钱_业余学python有用吗
Python的火热我就不细说了,大家都是编程老司机,对最前沿最火热的编程语言肯定比我还了解. 前几天,我看了一篇"如何用Python制造一个抖音小姐姐发掘器?",阅读量竟然比头条上 ...
- python 爬虫框架_小白学 Python 爬虫(28):自动化测试框架 Selenium (下)
人生苦短,我用 Python 如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:) 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Py ...
- 成都学python哪个机构好_成都学python人工智能哪个机构好
成都学python人工智能哪个机构好 来源:成都达内教育IT培训机构 发布时间:2020/11/12 11:32:23 成都学python人工智能哪个机构好---达内专注IT职业教育18年,10000 ...
- 老男孩学python多少钱_老男孩学Python编程后薪资待遇高吗?
1. 人工智能语言Python是黄金的人工智能.这是自然选择人工智能作为就业方向,就业前景是很好的,工资普遍较高.在Lagou.com上,人工智能的起薪工程师通常是20 k-35k.当然,如果你是一个 ...
- python 报表框架_现在学Python还不晚!阿里巴巴推荐的Python学习教程,分享给大家...
在互联网信息爆炸的时代,我们经常面临各种与信息搜集有关的事情,但是信息来源网站多,信息量大,如果采用常规的人工搜索+office软件整理,往往要花费大量的时间. 这里为大家介绍一个门槛低.易上手的工具 ...
- python 报表框架_现在学Python还不晚!阿里巴巴推荐的Python学习教程,分享给大家!...
在互联网信息爆炸的时代,我们经常面临各种与信息搜集有关的事情,但是信息来源网站多,信息量大,如果采用常规的人工搜索+office软件整理,往往要花费大量的时间. 这里为大家介绍一个门槛低.易上手的工具 ...
- python学习图解_轻松学Python 3 零基础彩色图解、专业入门
哈啰,Python Python无疑是当今最值得学习的程式语言,因为它不仅语法简单,而且功能强大,还可以在Windows.Mac OS和Linux等所有平台上执行.再加上拥有将近十万个各式各样的套件, ...
最新文章
- 澳大利亚多地热浪来袭 最高温度超40摄氏度
- SectionIndexer中的getSectionForPosition()与getPositionForSection()
- 第六章 贪心 【完结】
- 上半年产品原型设计Axure rp稿(持续更新)
- bfs:01迷宫(洛谷P1141)
- iphone主屏幕动态壁纸_灵动优美的iphone高清动态锁屏壁纸
- 圣诞限定快乐,送3本技术好书
- 编程修养 阅读笔记二
- Hyper-V用差异磁盘克隆系统
- ajax 将输入框内容清空_Robot Framework清空输入框文本内容
- python实现两个任意字符串乘积
- 怎么提供专利技术交底书
- Gallery 简易图片浏览
- DotEPUB:一键将网页转换成 EPUB 格式电纸书
- Cousera-Introduction to Data Science in Python Assignment1-4答案
- 干5年外包,突然失业了。。。
- 关于5G网速提升,对时代的影响
- html5 制作 蝴蝶飞动的动态图片,fireworks制作蝴蝶飞gif动画
- 科技风PPT模板百度网盘下载
- 合工大计算机考研数学,[考研干货]一战上岸合肥工业大学,来给大家分享一下考研心得...