为什么80%的码农都做不了架构师?>>>   

刚开始工作的时候对单元测试是一种神秘主义,觉得测试很好,但不知道如何开始。团队里也没人去写单元测试,偶尔有个也是写的集成测试,用Spring的test,将所有依赖注入进来,然后System.out.println输出肉眼观测数据是否符合要求,这让我对测试有向往,但是又嫌麻烦,毕竟这样测试写了很多的代码,但是速度上、准确性上都达不到要求。

就这样一直手动测试了很长时间,也听多了单元测试,自动化测试等等名词,却一直不得其门而入。买过一本单元测试相关的书,看完了,但就是没有开窍。去开发者头条上搜相关测试主题,讲的都是一些思想上的,对我目前的疑惑却没有什么帮助,毕竟我还没有入门。

后来忘了在哪又看到了单元测试的定义:是对一个模块,一个类或一个函数的正确性做检测的测试工作。突然有点明白了如何来写单元测试,以往一直迷惑这么多依赖该怎么办,覆盖不到全部执行路径怎么办,看到一个函数这四个字我找到了答案:一个函数依赖不会很多,可以使用mock来解决;一个函数的全部执行路径也就那么多,每种情况都考虑到也不会很多;前面说的使用System.out.println肉眼测试,也因为函数只有一个返回值而可以使用Assert类来断言来判断正确性。关键就在于单元,一开始把目光着眼在一个服务类上,依赖十几个服务,几十个外部函数调用,使我望而却步,而把焦点放到函数上,一来可以避免自己写超大的函数,二来依赖少,写单元测试的阻力变小了。

单元测试的目的

很多人会说测试的目的当然是保证程序的正确性,恰恰相反,作为开发和测试,我们测试的目的是为了找出程序中包含的错误,也就是测试是为了弄垮软件,测试没有发现错误说明测试用例是无效的或不完整的(Code complete).

你必须期望代码里有错误,期望发现错误的那个人是你而不是其他人。

单元测试的完整性

在这Code Complete中给了我们一个测试中用例的最少数量计算方法:

  1. 通过子程序的直路,开始时记1
  2. 遇到关键字if, while, for, do, and, or及其等价物时加1
  3. 遇到每一个case就加1,如果没有缺省情况,再加1

按照这种方法,基础的代码路径覆盖已经达到了,但在复杂程序里譬如for中包含多个if的情况需要添加更多的测试用例,CC中给出了数据流测试,这里不再赘述,因为我觉得如果你的函数连基础测试用例都十几个的话,你该考虑的不是添加更多的测试,而是如何拆分这个函数了。

单元测试中的典型错误

  1. off-by-one错误
  2. 边界值(刚好等于max,比max小1,比max大1)
  3. 变量初始化(特别是循环中
  4. 测试本身的错误

结语

单元测试是开发保证自己工作质量的一个有力工具,在我看来,写单元测试要比靠手工去测试花费的时间少,效率高,修改方便。甚至在数据构造上,单元测试也比手工测试要方便快捷,毕竟页面上每次你都要把需要的数据都准备一遍,在代码里你需要修改的可能也就是两三处地方。

转载于:https://my.oschina.net/liufq/blog/1587860

单元测试的思考与实践相关推荐

  1. 淘宝商品详情平台化思考与实践

    淘宝商品详情平台化思考与实践 该文章来自阿里巴巴技术协会(ATA)精选集,(部份整理自<Detail2.0总体方案-20140818>) 1.    现状背景 Detail当前的问题可参见 ...

  2. 前后端分离的思考与实践(三)

    Midway-ModelProxy - 轻量级的接口配置建模框架 前言 使用Node做前后端分离的开发模式带来了一些性能及开发流程上的优势(见<前后端分离的思考与实践 一>), 但同时也面 ...

  3. 时空大数据赋能智慧城市的思考和实践

    来源: 超图集团 时空大数据和新型智慧城市是当下地信产业的两大热词,这两者的奇妙关联将擦出怎样精彩的火花?时空大数据如何赋能城市智能与城市智慧,让智慧城市建设迈上新的高度? 2月6日至7日,由中国地理 ...

  4. 产品经验谈:阿里B2B电商-新零售产地供应链的思考与实践

    前言 产地供应链是新零售中的关键一环,源头好商好厂通全球已经实践一年多,本次分享将讲述电商供应链中一些设计思考和实践总结.主要包括:1688跨境专供提供全球数字化货源:从货源优势到全球消费胜势:168 ...

  5. 中国联通SDN/NFV的思考与实践

    为什么80%的码农都做不了架构师?>>>    编者按:2015中国SDN/NFV大会在北京召开,本次大会围绕SDN/NFV展开讨论,来自运营商.服务提供商等业界巨头纷纷参与此次大会 ...

  6. vue each_Vue 应用单元测试的策略与实践 05 - 测试奖杯策略

    本文首发于 Vue 应用单元测试的策略与实践 05 - 测试奖杯策略 | 吕立青的博客 欢迎关注知乎专栏 -- 前端的逆袭(凡可 JavaScript,终将 JavaScript.) 欢迎关注我的博客 ...

  7. 实时音视频流媒体传输的思考和实践

    本文来自即构科技技术副总裁冼牛在LiveVideoStackCon 2019上海大会的演讲,详细介绍了即构科技在实时流媒体传输协议选择,抖动处理,拥塞控制等多方面的实践. 文 / 冼牛 整理 / Li ...

  8. 腾讯IVWEB前端工程化工具feflow思考与实践

    本篇文章主要介绍腾讯IVWEB团队从0到1在工程化的思考和实践.feflow的全称是Front-end flow(前端工作流),致力于提升研发效率和规范的工程化解决方案.愿景是通过feflow,可以使 ...

  9. 【转载】前后端分离的思考与实践(五)

    基于前后端分离的多终端适配 前言 近年来各站点基于 Web 的多终端适配进行得如火如荼,行业间也发展出依赖各种技术的解决方案.有如基于浏览器原生 CSS3 Media Query 的响应式设计.基于云 ...

  10. 前后端分离的思考与实践(六)

    原文出处: 淘宝UED - 筱谷 Nginx + Node.js + Java 的软件栈部署实践 起 关于前后端分享的思考,我们已经有五篇文章阐述思路与设计.本文介绍淘宝网收藏夹将 Node.js 引 ...

最新文章

  1. 利用服务器修改服务器数据,用Jquery实现可编辑表格并用AJAX提交到服务器修改数据...
  2. 使用Docker中的mysql
  3. 【建议收藏】数学建模竞赛网站汇总
  4. QT下 cannot find -IGL的解决办法
  5. 九十三、Python使用百度云接口API实现截图,文字识别和语音合成
  6. vim删除文件第n行到结尾、或某段内容
  7. linux 引用其它脚本中的变量
  8. 用原生js封装get方法
  9. JEECG 3.7.1 非Maven版本源码下载,企业级JAVA快速开发平台
  10. 调用servlet java_请问调用servlet并从JavaScript调用Java代码以及参数
  11. vivado修改block design后更新进sdk
  12. Python3模块: hashlib
  13. WebView 的新增安全功能
  14. java中AWT如何关闭窗口_java 窗口关闭的六种方法
  15. 仓库装箱管理装箱发货,装箱扫描,装箱条码扫描系统成品装箱系统
  16. css怎么写仿粗体,在CSS中字体加粗要怎么做?
  17. 对指定网站渗透的一些总结
  18. 怎样看笔记本上有无无线网卡?
  19. win10尘埃4点击开始游戏自动关闭没反应|dirt4.exe进程消失的解决方法
  20. image-rendering 像素化图像像素(实验中)

热门文章

  1. Android Fragment切换动画效果
  2. FFmpeg在Linux下安装编译过程
  3. linux网页视频黑边,ffmpeg去除视频黑边命令
  4. python时间处理方法_基于python时间处理方法(详解)
  5. 学计算机专业选择设计为类需要艺考,想学设计必须参加艺考吗?设计学类专业,新高考选科怎么选?...
  6. deepin桌面为什么那么卡_UOS/Deepin桌面卡死该怎么办
  7. python多进程用不了_python 多进程,实际上都没有运行,sleep
  8. php 日之泪,php泪中一帮助
  9. 二、Nginx 反向代理配置初学个人理解
  10. android 禁用剪切板_如何阻止应用程序阅读Android剪贴板以保护您的隐私