KOK球盘体育
当前位置: KOK球盘体育 > 单元作文 >

单元测试系列一-为什么要写单元测试何时写写多

时间:2020-03-11 13:38来源:未知 作者:admin 点击:
KOK球盘体育

当前网址:http://www.wassei.com/danyuanzuowen/2020/0311/826.html

  老板为我的代码付报酬,而不是测试,所以,我对此的价值观是——测试越少越好,少到你对你的代码质量达到了某种自信(我觉得这种的自信标准应该要高于业内的标准, 当然,这种自信也可能是种自大)。如果我的编码生涯中不会犯这种典型的错误(如:在构造函数中设了个错误的值),那我就不会测试它。我倾向于去对那些有意义的错误 做测试,所以,我对一些比较复杂的条件逻辑会异常地小心。当在一个团队中,我会非常小心的测试那些会让团队容易出错的代码。

  这个答案给人感觉对单元测试持一定的否定态度和不感冒态度,但是这一最佳答案的回答者是Kent Beck!正是那位极限编程、测试驱动开发和单元测试以及JUnit的创造者Kent Beck。Kent Beck的答案,正好回答了单元测试要写到什么程度这个问题。单元测试不是越多越好,而是越有效越好!进一步解读就是哪些代码需要有单元测试覆盖:

  3. 不易理解的,即使是自己过段时间也会遗忘的,看不懂自己的代码,单元测试代码有助于理解代码的功能和需求

  4. 公共代码。比如自定义的所有http请求都会经过的;工具类等。

  5. 核心业务代码。一个产品里最核心最有业务价值的代码应该要有较高的单元测试覆盖率。

  (2)二是与具体实现代码同步进行。先写少量功能代码,紧接着写单元测试(重复这两个过程,直到完成功能代码开发)。其实这种方案跟第一种已经很接近,基本上功能代码开发完,单元测试也差不多完成了。

  (3)三是编写完功能代码再写单元测试。我的实践经验告诉我,事后编写的单元测试“粒度”都比较粗。对同样的功能代码,采取前两种方案的结果可能是用10个“小”的单测来覆盖,每个单测比较简单易懂,可读性可维护性都比较好(重构时单测的改动不大);而第三种方案写的单测,往往是用1个“大”的单测来覆盖,这个单测逻辑就比较复杂,因为它要测的东西很多,可读性可维护性就比较差。

  建议:我个人是比较推荐单元测试与具体实现代码同步进行这个方案的。只有对需求有一定的理解后才能知道什么是代码的正确性,才能写出有效的单元测试来验证正确性,而能写出一些功能代码则说明对需求有一定理解了。

  这其实是问单元测试能带来什么好处。之所以把这个问题放在最后讨论是因为如果一上来就说单元测试多好多好,终究还是会缺乏说服力。

  而有了上面讨论做铺垫,我们更加清楚单元测试的使用场景,以及它做得到和做不到的。

  修改了代码后单测依然通过的,起码说明我们的修改没有破坏程序的正确性。这从主观上能增加我们对代码的信心。虽然单元测试通过了并不意味着程序就没有bug了,但我们也要了解到这可能不是单元测试的问题。单元测试顾名思义是测试一个”单元”,这个”单元”一般是类或方法,而不是整个系统。对整个系统的测试那是集成测试,功能测试的职责。单元测试追求的是快速反馈,频繁执行。集成测试虽然测“全局”,但成本较高,所以执行频率较少。两者使用场景不同,目的不同。

  看到代码很差劲,想重构,但又担心重构之后出问题,怎么办呢?如果有单元测试情况就不一样了,重构完代码,跑一遍单元测试,如果单元测试都通过,基本上可以保证我们的重构没有破坏原来代码逻辑的正确性。不过前提是之前的写的单元测试质量很好,覆盖率很高。当然这仅限于小范围的重构,比如重构一个类或者函数的实现,但对于大刀阔斧的重构(比如单体重构成微服务,面向库表模式重构成DDD),就不适用,那个时候要重写单元测试了。

  单元测试不仅起到了测试的作用,还是一种很好的“文档”,通过单元测试,我们不需要深入的阅读代码,便能知道这段代码做什么工作,有哪些特殊情况需要考虑,包含哪些业务。

  3、不易理解的,即使是自己过段时间也会遗忘的,看不懂自己的代码,单元测试代码有助于理解代码的功能和需求

  5、 核心业务代码。一个产品里最核心最有业务价值的代码应该要有较高的单元测试覆盖率。

  单元测试用例编写总结 1 背景测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。单元测试...博文来自:程序员面试经验分享

  前言最近,在网上看到过一个调查,调查的内容是“程序员在项目开发中编写单元测试的情况”。当然,至于调查的结果,我想聪明的你已经可以猜到了。高达 58.3% 的比例,一般情况下不写单元测试,只有偶尔的情况...博文来自:紫羽风的博客

  最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成)one 樱花树 动态生成樱花效...博文来自:碎片

  这个话题老生长谈了,单元测试代码的用途和重要性不言而喻,但是在日常工作中,程度员总有各式各样的理由来拒绝写单元测试代码。从上个项目的亲身经历看,程序员不乐意写单元测试代码的理由有如下几类:1、没时间。...博文来自:Jackie的家

  文章目录为什么不想写单元测试为什么要写单元测试什么时候写单元测试怎么写单元测试为什么不想写单元测试单元测试太浪费时间了。随着系统的复杂度增加,你的一次改动可能引发出5个bug,或者你的bug被发现的时...博文来自:CL有毒

  原文:作者: Jeff Atwood很多年以来,用于随机测试(ad-ho...博文来自:我是传奇

  前言前面的两篇文章讨论过《为什么要写单元测试,何时写,写多细》和《单元测试规范》,这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取撮合交易的一个类来做单元测试。...博文来自:思码堂

  一、准备工作u盘,电脑一台,win10原版镜像(msdn官网)二、下载wepe工具箱极力推荐微pe(微pe官方下载)下载64位的win10 pe,使用工具箱制作启动U盘打开软件,选择安装到U盘(按照操...博文来自:weixin_41964258的博客

  1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答...博文来自:aaa13268的博客

  引述:程序测试对保障应用程序正确性而言,其重要性怎么样强调都不为过。JUnit是必须事先掌握的测试框架,大多数测试框架和测试工具都在此基础上扩展而来,Spring对测试所提供的帮助类也是在JUnit的...博文来自:Code-lovers Learning Notes

  本文源码:GitHub·点这里 GitEE·点这里一、生活场景小说搜索常一款互联网应用的开发流程如下:业务需求,规划产品,程序开发,测试交付。现在基于模板方法模式进行该过程...博文来自:爱无止

  引言最近也有很多人来向我请教,他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里...博文来自:java_sha的博客

  不要再问我python好不好学了我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可...博文来自:一行数据

  大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频...博文来自:帅地

  本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢...博文来自:Nickys blog

  昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔...博文来自:web前端学习交流群:600610151

  在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次...博文来自:程序员宜春的博客

  本文记录自己在自学C++过程中不同于C的一些知识点,适合于有C语言基础的同学阅读。如果纰漏,欢迎回复指正目录第一部分 基础知识一、HelloWorld与命名空间二、引用和引用参数2.1引用的定义2.2...博文来自:逆流而尚 的博客

  这个问题我进行了系统性的总结,以下将进行言简意赅的说明和渠道提供,希望对各位小猿/小媛们有帮助~根据我们的经验,程序员兼职主要分为三种:兼职职位众包、项目整包和自由职业者驻场。所谓的兼职职位众包,指的...博文来自:xiyue001的博客

  点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私......博文来自:爱开发

  每一个程序员都有一个梦想,梦想着能够进入阿里、腾讯、字节跳动、百度等一线互联网公司,由于身边的环境等原因,不知道 BAT 等一线互联网公司使用哪些技术?或者该如何去学习这些技术?或者我该去哪些获取这些...博文

  由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,...博文来自:帅地

  11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。区块链技术被认为是继蒸汽机、电力...博文来自:CSDN资讯

  欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所...博文来自:Python作业辅导员 - 天元浪子【许向武】

  单元测试在敏捷的开发理念中,覆盖全面的自动化测试是添加新特性和重构的必要前提。单元测试在软件开发过程中的重要性不言而喻,特别是在测试驱动开发的开发模式越来越流行的前提下,单元测试更成为了软件开发过程中...博文来自:steven2xupt的博客

  三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。七月初内推了字节跳动的提前批,因为内...博文来自:ljh_shuai的博客

  将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。也可以说是一个小人工智障。思路可以运用在不同地方,主要介绍的是思路。...博文来自:SunriseCai的博客

  在分享之前,先说说初学者如何学习编程,这个话题想必非常的重要,要学好编程,给你一些学习网站也好、实用工具也好,但前提是你知道如何去学习它。见过很多初学者,以及小鹿我刚开始学习的时候,也是自己瞎摸索,找...博文来自:小鹿动画学编程

  中国麻将:世界上最早的区块链项目最近区块链这个玩意又被市场搞的很是火热,相信大部分人都不太清楚这玩意到底是怎么样的一个概念,它来了,它来了,它到底是啥~ 国家都开始发文支持了,下面是一个通俗易懂的例子...博文来自:gao_chun

  知乎高赞:中国有什么拿得出手的开源软件产品?在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?”事实上,还不少呢~本人于2019.7.6进行了较为全面的...博文来自:大白技术控 - 大白技术Bravo Yeung

  作者 胡书敏责编 刘静出品 CSDN(ID:CSDNnews)本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。...博文来自:CSDN资讯

  前奏:今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。以下就是他的简历和面试情况。基本情况:专业技能:1、熟悉Sping了解SpringMVC、SpringBoo...博文来自:HarderXin的专栏

  正文我先描述一下bug的现象哈:这两个输入框的值都是我从KV(Redis之类的存储中间件)里面获取到的,也是可以实时修改的,我自作聪明,想着KV里面如果没值,就默认取一个静态变量,这样有个兜底,在类加...博文来自:Java技术的博客

  点击“技术领导力”关注∆每天早上8:30推送作者Mr.K 编辑 Emma来源技术领导力(ID:jishulingdaoli)前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者...博文来自:技术领导力

  说实话,对于学习路线这种文章我一般是不写的,大家看我的文章也知道,我是很少写建议别人怎么样怎么样的文章,更多的是,写自己的真实经历,然后供大家去参考,这样子,我内心也比较踏实,也不怕误导他人。但是,最...

------分隔线----------------------------