Python核心技术与实战
景霄
Facebook资深工程师
立即订阅
13891 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从工程的角度深入理解Python
免费
基础篇 (14讲)
01 | 如何逐步突破,成为Python高手?
02 | Jupyter Notebook为什么是现代Python的必学技术?
03 | 列表和元组,到底用哪一个?
04 | 字典、集合,你真的了解吗?
05 | 深入浅出字符串
06 | Python “黑箱”:输入与输出
07 | 修炼基本功:条件与循环
08 | 异常处理:如何提高程序的稳定性?
09 | 不可或缺的自定义函数
10 | 简约不简单的匿名函数
11 | 面向对象(上):从生活中的类比说起
12 | 面向对象(下):如何实现一个搜索引擎?
13 | 搭建积木:Python 模块化
14 | 答疑(一):列表和元组的内部实现是怎样的?
进阶篇 (11讲)
15 | Python对象的比较、拷贝
16 | 值传递,引用传递or其他,Python里参数是如何传递的?
17 | 强大的装饰器
18 | metaclass,是潘多拉魔盒还是阿拉丁神灯?
19 | 深入理解迭代器和生成器
20 | 揭秘 Python 协程
21 | Python并发编程之Futures
22 | 并发编程之Asyncio
23 | 你真的懂Python GIL(全局解释器锁)吗?
24 | 带你解析 Python 垃圾回收机制
25 | 答疑(二):GIL与多线程是什么关系呢?
规范篇 (7讲)
26 | 活都来不及干了,还有空注意代码风格?!
27 | 学会合理分解代码,提高代码可读性
28 | 如何合理利用assert?
29 | 巧用上下文管理器和With语句精简代码
30 | 真的有必要写单元测试吗?
31 | pdb & cProfile:调试和性能分析的法宝
32 | 答疑(三):如何选择合适的异常处理方式?
量化交易实战篇 (8讲)
33 | 带你初探量化世界
免费
34 | RESTful & Socket: 搭建交易执行层核心
35 | RESTful & Socket: 行情数据对接和抓取
36 | Pandas & Numpy: 策略与回测系统
免费
37 | Kafka & ZMQ:自动化交易流水线
38 | MySQL:日志和数据存储系统
39 | Django:搭建监控平台
40 | 总结:Python中的数据结构与算法全景
技术见闻与分享 (4讲)
41 | 硅谷一线互联网公司的工作体验
42 | 细数技术研发的注意事项
加餐 | 带你上手SWIG:一份清晰好用的SWIG编程实践指南
43 | Q&A:聊一聊职业发展和选择
结束语 (1讲)
结束语 | 技术之外的几点成长建议
Python核心技术与实战
登录|注册

30 | 真的有必要写单元测试吗?

景霄 2019-07-17
你好,我是景霄。
说到 unit test(即单元测试,下文统一用中文称呼),大部分人的反应估计有这么两种:要么就是,单元测试啊,挺简单的呀,做不做无所谓吧;要么就是,哎呀,项目进度太赶,单元测试拖一拖之后再来吧。
显然,这两种人,都没有正确认识到单元测试的价值,也没能掌握正确的单元测试方法。你是不是觉得自己只要了解 Python 的各个 feature,能够编写出符合规定功能的程序就可以了呢?
其实不然,完成产品的功能需求只是很基础的一部分,如何保证所写代码的稳定、高效、无误,才是我们工作的关键。而学会合理地使用单元测试,正是帮助你实现这一目标的重要路径。
我们总说,测试驱动开发(TDD)。今天我就以 Python 为例,教你设计编写 Python 的单元测试代码,带你熟悉并掌握这一重要技能。

什么是单元测试?

单元测试,通俗易懂地讲,就是编写测试来验证某一个模块的功能正确性,一般会指定输入,验证输出是否符合预期。
实际生产环境中,我们会对每一个模块的所有可能输入值进行测试。这样虽然显得繁琐,增加了额外的工作量,但是能够大大提高代码质量,减小 bug 发生的可能性,也更方便系统的维护。
说起单元测试,就不得不提 Python unittest 库,它提供了我们需要的大多数工具。我们来看下面这个简单的测试,从代码中了解其使用方法:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Python核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(26)

  • 美美
    pytest似乎比官方 unitest 更容易且更强大!
    2019-07-22
    5
  • KaitoShy
    后面有几个代码没怎么看懂,希望老师详细说明一下:
    1) from unittest.mock import patch

    @patch('sort')
    def test_sort(self, mock_sort):
        ...
    文档上说这个是个patch()里面是个类,但老师这里表达的是函数?
    2) @patch('%s.preprocess') 这个又是表达的什么的,运行后ModuleNotFoundError: No module named '%s'。
    所以烦请老师把这块详细说明一下,不然感觉还是不怎么会使用
    2019-07-17
    4
    4
  • Steven
    开始触及盲点了,其实平时很少定单元测试,感觉这一章的内容有点茫然,感觉说的都懂,但是又感觉不知道要拿来怎么用。
    2019-07-26
    3
  • VincentBegins
    根据我的经验,在动手写代码前,先得有让代码testable的意识,使用DIP原则与dependency injection将业务逻辑代码与具体的平台实现代码解耦,平台实现代码包括数据库操作,文件读写,对rest api的调用,等等),尽量保持平台代码简单直接。

    在写UT的时候,编写对平台的mock即可。
    2019-08-07
    2
  • 盒子妮
    感谢老师的讲解,只是后面的side_effect和patch还是不明白该怎么用,后面如果有答疑的话希望老师详细讲一下。谢谢
    2019-07-31
    2
  • 长期规划
    软件和其它产品一样,都要保证质量。提升代码质量的工具之一是单测,相当于自检的一部分。自检通过后再交给质量部(测试部),这是对自己工作更负责,减少bug
    2019-09-09
    1
    1
  • hello,everyone
    从来没写过单元测试,在jupyter notebook 做数据分析,每步都会有结果出来,根据结果做修改,请问这样的数据分析,有必要写单元测试吗?或者数据分析过程有什么好的测试方法,感觉有时候花好长时间完成一个特征的处理,发现结果与预期不一致,很是头疼。
    2019-07-28
    1
  • zengyunda
    从来没有写过单元测试的人表示很忧伤
    2019-07-25
    1
  • 夜路破晓
    认知层次决定了效率高低。
    虽然作为小白代码部分看得一脸懵逼,但完全get到了测试单元属于高级思维运用的高级方法与技能,因为它不仅要求代码设计拥有模块化理念的底层逻辑,还提倡代码不只是满足产品功能需求更要求持续稳定高效。
    这就是码农与非码农的认知差距。
    2019-07-17
    1
  • 我的单元测试是直接跑流程,有时候有些很好复杂的调用就很麻烦。这个应该能提高效率。
    2019-07-17
    1
  • Paul Shan
    单元测试是从外部视角看每个函数,确定函数的输入输出符合条件,函数的调用符合预期。单元测试相当于从另外一个角度重新理解了问题,就像我们做数学题,如果两种不同的方法得出了相同的结论,说明这两种方法的正确率很高。
    2019-11-23
  • Geek_57038c
    觉得这篇文章对单元测试算是一个入门吧,更多的还需要在工作中不断地积累和实践。看到评论中的很多内容,也觉得受益匪浅
    2019-11-19
  • 自由民
    尝试过测试驱动开发,那时还在用c++,没有太好的工具,就放弃了。
    2019-10-21
  • 没羊的灰太狼
    实现自动化测试框架的过程中,对每个类和函数都形成了单元测试,最初的设想是,即证明新增函数可用并无误,也是在文档或注释不完整的时候,作为如何使用函数的示例。
    2019-10-14
  • 无为
    一直在使用unitttest,但是一直没有试过mock来做,感谢!
    2019-09-09
  • ttttt
    patch没看懂,但是还是有收获的。知道有这个东西,回头用到的时候有个方向。
    2019-07-25
  • magician
    requests 测试api
    2019-07-25
  • 李朝辉
    老师 排序的j循环代码是不是写错了 for j in range(i + 1, l)
    2019-07-24
    1
  • 图·美克尔
    我通常都把模块的简单测试代码写在main中,没有单独写单元测试
    2019-07-23
  • 小侠龙旋风
    在说Mock Side Effect的用法时,老师,你说代码很简短,你一定可以看懂。然后我就对这两句疑惑了:
    mock = MagicMock()
    mock.side_effect = side_effect
    在mock.side_effect = side_effect赋值中到底发生了什么?
    2019-07-21
收起评论
26
返回
顶部