编写代码离不开写测试,只有通过测试才知道代码的逻辑有没有问题,健壮性好不好等,测试让你深信,即便有越来越多的人使用你的程序,它也能一如既往正确地工作。

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:如何测试函数与类相关推荐

  1. python判断素数_小白学Python | 你还在说你入不了门吗

    收藏的好多啊 原创不易,动动小手,点个赞啦!! 十二月份,天气有时候会很阴沉,一天都见不到太阳.气温也慢慢变冷了,晚上回家还是会感觉到衣服穿少了. 阴阴沉沉总会过去的,我还是期待阳春三月. 2019年 ...

  2. 新手学python书籍推荐_新手学python看哪本书

    对于零基础入门的人来说,对于Python的学习还是有点懵懵懂懂的,如果有一些书籍先看看来引导,学起来难度也会减低很多!所以,学python倒是向大家推荐这些书籍! 1.<PYTHON基础教程(第 ...

  3. 只会python怎么挣钱_业余学python有用吗

    Python的火热我就不细说了,大家都是编程老司机,对最前沿最火热的编程语言肯定比我还了解. 前几天,我看了一篇"如何用Python制造一个抖音小姐姐发掘器?",阅读量竟然比头条上 ...

  4. python 爬虫框架_小白学 Python 爬虫(28):自动化测试框架 Selenium (下)

    人生苦短,我用 Python 如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:) 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Py ...

  5. 成都学python哪个机构好_成都学python人工智能哪个机构好

    成都学python人工智能哪个机构好 来源:成都达内教育IT培训机构 发布时间:2020/11/12 11:32:23 成都学python人工智能哪个机构好---达内专注IT职业教育18年,10000 ...

  6. 老男孩学python多少钱_老男孩学Python编程后薪资待遇高吗?

    1. 人工智能语言Python是黄金的人工智能.这是自然选择人工智能作为就业方向,就业前景是很好的,工资普遍较高.在Lagou.com上,人工智能的起薪工程师通常是20 k-35k.当然,如果你是一个 ...

  7. python 报表框架_现在学Python还不晚!阿里巴巴推荐的Python学习教程,分享给大家...

    在互联网信息爆炸的时代,我们经常面临各种与信息搜集有关的事情,但是信息来源网站多,信息量大,如果采用常规的人工搜索+office软件整理,往往要花费大量的时间. 这里为大家介绍一个门槛低.易上手的工具 ...

  8. python 报表框架_现在学Python还不晚!阿里巴巴推荐的Python学习教程,分享给大家!...

    在互联网信息爆炸的时代,我们经常面临各种与信息搜集有关的事情,但是信息来源网站多,信息量大,如果采用常规的人工搜索+office软件整理,往往要花费大量的时间. 这里为大家介绍一个门槛低.易上手的工具 ...

  9. python学习图解_轻松学Python 3 零基础彩色图解、专业入门

    哈啰,Python Python无疑是当今最值得学习的程式语言,因为它不仅语法简单,而且功能强大,还可以在Windows.Mac OS和Linux等所有平台上执行.再加上拥有将近十万个各式各样的套件, ...

最新文章

  1. 澳大利亚多地热浪来袭 最高温度超40摄氏度
  2. SectionIndexer中的getSectionForPosition()与getPositionForSection()
  3. 第六章 贪心 【完结】
  4. 上半年产品原型设计Axure rp稿(持续更新)
  5. bfs:01迷宫(洛谷P1141)
  6. iphone主屏幕动态壁纸_灵动优美的iphone高清动态锁屏壁纸
  7. 圣诞限定快乐,送3本技术好书
  8. 编程修养 阅读笔记二
  9. Hyper-V用差异磁盘克隆系统
  10. ajax 将输入框内容清空_Robot Framework清空输入框文本内容
  11. python实现两个任意字符串乘积
  12. 怎么提供专利技术交底书
  13. Gallery 简易图片浏览
  14. DotEPUB:一键将网页转换成 EPUB 格式电纸书
  15. Cousera-Introduction to Data Science in Python Assignment1-4答案
  16. 干5年外包,突然失业了。。。
  17. 关于5G网速提升,对时代的影响
  18. html5 制作 蝴蝶飞动的动态图片,fireworks制作蝴蝶飞gif动画
  19. 科技风PPT模板百度网盘下载
  20. 合工大计算机考研数学,[考研干货]一战上岸合肥工业大学,来给大家分享一下考研心得...

热门文章

  1. Ubuntu20.04更换软件源之后apt-get update报错
  2. 1、乐趣国学——“君子不器”
  3. python学习笔记(4)—— 模型
  4. (转载)使用Android Studio对代码进行重构
  5. 未来计算机行业什么最吃香,未来哪些行业吃香 这四个行业前景比较好
  6. 鼠标背景带光圈突出显示
  7. ubuntu装后的常用软件的安装与配置
  8. 四种计算机硬件故障检修方法,计算机硬件检测及维修几点认识.doc
  9. xampp php5.6,XAMPP for Linux
  10. utf-8 和gbk 编码区别