单元测试

估计对于小白来说,一提到单元测试就是开发、开发、开发,好深奥、好难。但是我想说,单元测试可能是所有测试中最简单的了,想反系统测试可能是最难的,只是所谓的开发门槛让测试人员有些抵触而已。

为何说单元测试是最简单的内容呢,我们先来看一个例子:

有一个人去医院看病,然后医生问了一下病况后直接让你先去抽血,根据抽血的结果告诉你你是感冒了,给你开了一些感冒药。在这个情况下你觉得医生有多少的技术在里面?

另外一种情况,还是去医院看病,病人刚进来还没说话,医生就已经准确的说出了病人的病情和对应的诊疗手段,这个时候你会觉得医生有多少技术在里面?

在上面这个例子中,抽血化验就是一种单元测试手段,通过对血液成分来判断你体内病毒和相关指标是否正常,从而确定病因;而后一种的望闻问切就是通过系统表面的现象来判断病因,相对来说通过系统表面来准确判断所需要的能力需要高很多。而血液成分在早期会比较复杂,因为涉及到各种试剂和观察,而现在有了大型医疗设备,血液分析只要几分钟就能完成了,软件也是如此。

曾经单元测试是以静态扫描为主的方式来实现的,需要专业的人员通过仔细的阅读、调试代码来实现的,单元测试的成本高、时间长,而现在有了很多辅助甚至自动化工具,其难度也大大下降。

那么单元测试到底是怎么回事呢,下面从两个方面来说一下单元测试的要点:

覆盖率

由于单元测试是从代码级别对软件质量进行保证的,单元测试无法验证业务级别的内容,只能通过覆盖率来评估质量。

对于代码的覆盖率常见的无非是:语句覆盖、分支覆盖、条件覆盖、路径覆盖等,这些概念其实本身都不是非常的复杂,而且有很多工具可以支持测试时直接帮你计算覆盖率,所以现在做单元测试用例的代价就会比以前小很多。

通过工具可以做到很高的覆盖率,但是就算代码本身没有什么问题,也不能保证做出来的软件是正确的,所以单元测试从技术上来说有一些要求(编程),但是从业务上要求很低,而如果希望在单元测试上做出点成绩来就需要对业务熟悉点,能够从业务级别来生成合适的单元测试用例,弥补简单覆盖率所带来的思维定式。

覆盖率计算常见的有eclemmla、eCobertura,这两个工具都可以在你单元测试中完成对被执行部分的覆盖率计算并且提供对应的报告。

驱动及桩

驱动和桩是单元测试中的两个基本概念。所谓的驱动就是调用被测对象的代码部分,而所谓的桩就是为了满足代码需要运行起来所存在的一些支撑代码部分。为了达到覆盖率,驱动是比较简单开发,但是也是比较难于准备的。准备的复杂点在于如何对代码方法完成正确的调用,并且有效覆盖对应的代码,所以驱动部分一般会和数据驱动部分在一起。

所谓的数据驱动就是在传统驱动的基础上提供一个数据源,然后依次遍历这个数据源实现一个驱动的多次不同调用,从而提高代码维护度。

从某些角度来说驱动是比较好写的,因为只要知道怎么调用被测对象即可,而设计调用方法的数据受到覆盖率的影响需要一些设计。

而比较复杂的是桩,因为桩是用来替代没有实现的部分,让代码可以运行的“伪装”,而桩又需要根据驱动来完成对应的分支支撑,所以写桩的要求会高很多。

对于驱动部分大家可以考虑使用testng来支撑,而桩部分EasyMock,Jmock和JMockit都是可以考虑的部分,这些东西对于测试人员来说其实不是很重要,因为,单元测试的驱动和桩大部分都应该是开发人员完成的,测试人员只需要支撑一下驱动用例设计部分即可。

而在大多数公司单元测试会因为开发人员的习惯问题,并无法有效的开展,从而导致到系统测试部分,经常会遇到莫名其妙的数据错误,其实有些时候就是因为单元测试并没有有效的验证一些逻辑数据计算导致的。

上面说到的都是偏功能部分的,其实非功能部分也有很多,例如安全和性能,这里就不多提了。

单元测试始终是走在需求之后最前端的测试,所以能在这个阶段发现越多的问题,对项目后期会带来很大的帮助,但是基于能力和意识问题,这点大多数情况都没法做到位。

最后简单总结下在单元上可以推荐的工具(基于JAVA方向):Findbug、DBunit、junit、Testng、eclemmla、eCobertura、EasyMock,Jmock和JMockit;前端的JS单元测试和数据库单元测试也是大家可以思考的。

转载于:https://www.cnblogs.com/daxiong2014/p/4476023.html

小白成长建议(9)-苞丁解牛相关推荐

  1. 这65条工作和成长建议,你将受用终生!

    这65条工作和成长建议,每一条都值得我们认真思考.希望对你有启发. 从1990年进入格力,董明珠已经工作了近30年. 她花了近30年的时间,一手把格力从一家亏损的中小企业变成全球500强,年销售额超过 ...

  2. 小白成长记第2期:简单易操的YouTube美金项目,get!

    这里是小白成长记,立志于帮助新人小白们成长,我是小白 之前小白一直在说国内的互联网创业项目,其实,不仅仅是国内,国外也会有一些好的项目,只要会简单的操作,就算是真小白也可以轻松操作.那么我们今天就来详 ...

  3. 我的世界服务器怎么找到指定路径,[小白]MC服务端目录详解

    服务器的前期准备工作都做好了,是时候上传服务端到服务器了.不过--先等等,在上传前你应该先了解一下服务端目录的结构以便于后期的维护! 如图所示的是MCPC+1.6.4的服务端结构示意图,其他开服端基本 ...

  4. 复盘(一) 【一个身家10亿的国企前辈,送给年轻人的三点成长建议 】

    转载自Linkedln 一个身家10亿的国企前辈,送给年轻人的三点成长建议: 一.为了取悦别人而牺牲自己,是对人生的最大浪费 其实应该取悦的是自己 二.解决问题的高手,都拥有高频.持续.深度的复盘能力 ...

  5. Joomla远程代码执行漏洞分析小白版(小宇特详解)

    Joomla远程代码执行漏洞分析小白版(小宇特详解) 今天看了一下2021陇原战役WP,在看web方向的时候,看到pop链,想了解一下,后来又看到了p师傅在15年的一篇文章,在这里记录一下.这里主要是 ...

  6. 小白成长记(一、ERP之增删改查)

    小白成长记(一.ERP之增删改查) 第一个项目-ERP之增删改查基本操作 hello,大家好.我是闲齁齁,一名刚工作六个月的.NET程序员,这篇文章主要用于记录我的第一个项目-ERP.我们的ERP主要 ...

  7. python 开课了_解答你学习Python的困惑,《Python小白成长记》开课啦

    原标题:解答你学习Python的困惑,<Python小白成长记>开课啦 继<Python轻松学>和<Python-turtle图形编程入门>两门Python课程后, ...

  8. “理想”上市,80后李想,做出2家上市公司:这是我给年轻人的100条成长建议...

    点击"技术领导力"关注∆  每天早上8:30推送 来源 l 粥左罗(ID:fangdushe520) 7月30日晚,理想汽车在纳斯达克敲响了上市钟声. 按照发行价11.5美元/股计 ...

  9. 【小白成长】提升内功,能够让你走的更加长远的优秀书籍介绍

    有时有些读者问我,数据结构与算法该怎么学?有书籍推荐的吗?Java 初学者该怎么学等等.今天我就给大家介绍一些我这几年看过的一些自认为优秀的书籍,由于我看的大部分书籍可以说都是通用的,所以如果你有时间 ...

最新文章

  1. MVC验证05-自定义验证规则、验证2个属性值不等
  2. python某行某列读取数据_使用scrpython从某行的第一列提取数据
  3. 前端学习(969):移动端300ms延时问题
  4. 我们分析了50万条拼多多商品数据,告诉你到底是消费升级还是降级?
  5. 整理了Linux常用命令变量
  6. Python案例:词频统计
  7. (4)Linux进程调度-组调度及带宽控制
  8. 安全漏洞——如何查找和修复它们
  9. java点击按钮在控制台输出_java 怎么获取控制台的数据并且输出到GUI上
  10. 吴恩达机器学习作业5——偏差与方差
  11. 将 Java Spring Framework 应用程序迁移到 Windows Azure
  12. python模拟微信投票_python 模拟微信投票
  13. lintcode java_Lintcode-java版本
  14. 何时是使用代码报表的最佳方法,何时采用frx格式
  15. 微信抖音工具箱头像制作壁纸小程序带改图制图流量主功能搭建动态社群人脉助手
  16. 自学网络 arp_ignore/arp_announce
  17. Laravel之数据库操作与Eloquent模型使用总结
  18. 一张图看懂自动驾驶的分级
  19. 4.5 GPO的编辑
  20. 2015_BOE_Chiu2 杜克大学oct数据集

热门文章

  1. oracle 以1开头以9结尾_小学生记叙文写作技巧六——如何把握好文章的开头和结尾呢?...
  2. java word转pdf jacob_java使用jacob.jar将word转pdf
  3. linux内存映射起始地址,内存初始化代码分析(三):创建系统内存地址映射
  4. IDEA离线使用本地maven仓库
  5. 生成对抗网络 GAN 基本原理与发展历程
  6. 【Luogu3926】SAC E#1 - 一道不可做题 Jelly
  7. 【POJ3190】Stall Reservations
  8. 为什么运行review manager很卡顿_手机明明没坏,为什么声音开到最大依然很小?原来问题在这里...
  9. window.onload和jQuery的ready函数区别
  10. 排列:计算1!+2*2!+3*3!+...+n*n!