30 | 真的有必要写单元测试吗?
景霄
该思维导图由 AI 生成,仅供参考
你好,我是景霄。
说到 unit test(即单元测试,下文统一用中文称呼),大部分人的反应估计有这么两种:要么就是,单元测试啊,挺简单的呀,做不做无所谓吧;要么就是,哎呀,项目进度太赶,单元测试拖一拖之后再来吧。
显然,这两种人,都没有正确认识到单元测试的价值,也没能掌握正确的单元测试方法。你是不是觉得自己只要了解 Python 的各个 feature,能够编写出符合规定功能的程序就可以了呢?
其实不然,完成产品的功能需求只是很基础的一部分,如何保证所写代码的稳定、高效、无误,才是我们工作的关键。而学会合理地使用单元测试,正是帮助你实现这一目标的重要路径。
我们总说,测试驱动开发(TDD)。今天我就以 Python 为例,教你设计编写 Python 的单元测试代码,带你熟悉并掌握这一重要技能。
什么是单元测试?
单元测试,通俗易懂地讲,就是编写测试来验证某一个模块的功能正确性,一般会指定输入,验证输出是否符合预期。
实际生产环境中,我们会对每一个模块的所有可能输入值进行测试。这样虽然显得繁琐,增加了额外的工作量,但是能够大大提高代码质量,减小 bug 发生的可能性,也更方便系统的维护。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文以Python为例,介绍了单元测试的重要性、概念、方法和技巧。首先强调了单元测试在软件开发中的重要性,能够提高代码质量、减少bug发生可能性,便于系统维护。文章详细介绍了Python中unittest库的使用方法,并提出了mock、side_effect和patch等技巧,通过虚假实现替换被测试函数的依赖项,帮助开发者集中精力进行功能测试。作者强调了高质量单元测试的重要性,指出低质量的单元测试可能无法验证代码正确性,浪费时间。此外,文章还提到了Test Coverage的重要性,以及模块化设计对于编写高质量单元测试的必要性。通过重构代码,使单元测试更加全面、精确,并且让整体架构、函数设计更美观。总结了单元测试的理念是先模块化代码设计,然后针对每个作用单元,编写单独的测试去验证其准确性。更好的模块化设计和更多的Test Coverage,是提高代码质量的核心。而单元测试的本质就是通过mock,去除掉不影响测试的依赖项,把重点放在需要测试的代码核心逻辑上。最后,强调了单元测试是保证代码质量和准确性必不可少的一环,适用于任何语言。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》,新⼈⾸单¥59
《Python 核心技术与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(34)
- 最新
- 精选
- 咩小小我想问下一般单元测试是由写该代码的开发者写吗,那么测试开发工程师对单元测试的关注度跟开发者写的单元测试关注度有啥不一样呢,希望老师能讲一下
作者回复: 我们公司的风格是单元测试都由开发者写的,因为代码就是开发者写的,当然单元测试也一并写了
2020-04-273 - Claywoow一些大项目中的函数有文件的读写操作有必要mock掉吗
作者回复: 最好也mock一下
2019-07-171 - enjoylearning很喜欢写单测,通过后才会继续实现下一步功能
作者回复: 嗯嗯,这个习惯很好
2019-07-171 - return一直因为业务逻辑复杂,而不好做单元测试。 今天茅塞顿开。 感谢老师。
作者回复: 谢谢你的支持
2019-07-171 - Steven开始触及盲点了,其实平时很少定单元测试,感觉这一章的内容有点茫然,感觉说的都懂,但是又感觉不知道要拿来怎么用。2019-07-26134
- 美美pytest似乎比官方 unitest 更容易且更强大!2019-07-22130
- 盒子妮感谢老师的讲解,只是后面的side_effect和patch还是不明白该怎么用,后面如果有答疑的话希望老师详细讲一下。谢谢2019-07-3120
- 黑客不够黑mock介绍还说得过去,side effect和patch在新手看来简直不知道在说什么2020-04-13217
- VincentBegins根据我的经验,在动手写代码前,先得有让代码testable的意识,使用DIP原则与dependency injection将业务逻辑代码与具体的平台实现代码解耦,平台实现代码包括数据库操作,文件读写,对rest api的调用,等等),尽量保持平台代码简单直接。 在写UT的时候,编写对平台的mock即可。2019-08-07111
- 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-1747
收起评论