【《重构 改善既有代码的设计》学习笔记4】构筑测试体系

本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理并且加上自己的浅显的思考总结!如果想要进行重构,首要前提是 拥有一个可靠的测试环境。1、 自测代码的价值完成一个功能:设计+开发+调试,认真分析,程序员最多花费的时间不是开发(编码),而是用来调试。调试可能花费无数个小时,甚至通宵达旦。修复错误是快速的,而找出错误却是恶梦一场。当修复好一个错误,总是会有另一个错误的出现。而引…

大家好,又见面了,我是全栈君。

本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理并且加上自己的浅显的思考总结!

如果想要进行重构,首要前提是 拥有一个可靠测试环境。

1、 自测代码的价值

完成一个功能:设计+开发+调试,认真分析,程序员最多花费的时间不是开发(编码),而是用来调试。调试可能花费无数个小时,甚至通宵达旦。

修复错误是快速的,而找出错误却是恶梦一场。当修复好一个错误,总是会有另一个错误的出现。而引入的错误可能要很久之后才能注意到它。【排查错误,定位错误花费的时间更多,并且在改bug的过程,又引入新的bug】

在做测试的时候,确保所有的测试都完全的自动化,让它们检查自己的测试结果。【做到这一点不容易,我目前所在的公司单元测试都不规范,更不要说完全自动化,后面还是多多学习,搞一套标准,推广起来】

正常的开发过程是,写好一个功能,就立即添加测试。 一套测试就是一个很强大的bug侦测器,能够大大缩减查找bug所需的时间。

推广自测或者要做起来,难度是很大的。 因为编写测试程序,意味着要写很多额外的代码。那就 要花费更多的时间,很多人可能觉得这没有提高编程开发速度,就不去做。或者因为需求进度问题,也省略不做。

【公司中的一些开发人员,根本也没有这方面的意识,因为没有强制的要求制度,甚至没有考虑过写自测代码】

2、JUnit测试框架

目前JUnit版本迭代都到5了,JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit5[简单了解]

JUnit Platform是在JVM上启动测试框架的基础。它还定义了TestEngine API,用于开发在平台上运行的测试框架。此外,该平台还提供了一个Console Launcher,用于从命令行启动平台,以及一个基于JUnit 4的Runner,用于在基于JUnit 4的环境中运行平台上的任何TestEngine。JUnit平台的一流支持也存在于流行的IDE中(如IntelliJ IDEA,Eclipse)

JUnit Jupiter是用于在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合.Jupiter子项目提供了一个TestEngine,用于在平台上运行基于Jupiter的测试。

JUnit Vintage提供了一个TestEngine,用于在平台上运行基于JUnit 3和JUnit 4的测试。

重构书中的示例都是在 JUnit很老的版本,很多用用法和目前新版已经完全不一样。

相信进行java开发的程序员们,一定都是用过Junit这个优秀的单元测试工具。这里也就不说具体的用法了。

单元测试和功能测试

单元测试的目的: 提高程序员的生产率。

至于上QA(质量保证)部门开心,那是附带效果。单元测试是高度局部化的东西,每个测试类都隶属于单一包。能够测试其他包的接口。

功能测试的目的:保证软件能够正常运作。

从客户角度保证质量,不关心程序员的生产力。由一个喜欢寻找bug的独立团队(测试团队)来开发。

【在公司单元测试可以没有,功能测试一定是有的。单元测试还是要程序自身提高意识和行动起来】

3、添加更多的测试

观察类该做的所有事情,然后针对任何一项功能的任何一种可能失败情况,进行测试。【学习的标准和榜样】

测试的要诀是: 测试你最担心出错的部分。

测试也要考虑可能错误的边界条件,把火力集中到那儿。

不要因为测试无法捕获所有bug就不写测试,因为测试的确可以捕捉到到大多数bug。

总结

构筑测试体系,这个强调多少次都不为过,我根据个人所待过的公司,发现 大家都是一直强调单元测试,但是真正开发功能,最后落到实地的单元测试代码少之又少。一个是需求进度问题,一个程序员自身的问题

如果你今天看到了我的这篇博文,我希望我们应该有这样一个意识,在开发完一个功能后,一定要想着些单元测试。写测试代码,能写出好的测试代码你一定会从中获益很多。

我会整理一套规范先在自己的项目组用起来,后续推到公司其他项目组中,后续测试的东西也会分享出来。一起学习,一起成长。


如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到,谢谢!

如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客和关注的个人微信公众号!

愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人。

【《重构 改善既有代码的设计》学习笔记4】构筑测试体系

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

© 每天都在变得更好的阿飞

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121051.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SenticNet情感词典介绍[通俗易懂]

    SenticNet情感词典介绍[通俗易懂]在进行情感分析时,一个好的情感词典能够让我们的工作事半功倍,较为出名的情感词典有SentiWordNet,GeneralInquirer等,这篇博客将介绍另外一个出色情感词典,SenticNet。简介当谈论SenticNet时,我们正在谈论概念层面的情感分析,即通过语义和语言学来完成极性探测、情感识别等任务,而不是单纯的依靠词共现频率。SenticNet可以看作是以下其中一种:1…

    2022年8月23日
    16
  • Oracle日期函数「建议收藏」

    Oracle日期函数「建议收藏」Oracle日期类型函数是操作日期、时间类型的相关数据,返回日期时间类型或数字类型结果,常用的函数有:SYSDATE()、ADD_MONTHS()、LAST_DAY()、TRUNC()、ROUND()等等。系统日期、时间函数:SYSDATE函数:该函数没有参数,可以得到系统的当前时间。案例代码:selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’)fromdual;结果:SYSTIMESTAMP函数:该函数没有参数,可以得到系统的当.

    2022年7月17日
    11
  • UNIX命令

    UNIX命令 一、UNIX命令格式1、UNIX命令提示符   在命令行下,操作系统会显示一提示符,提示用户在此提示符后可以输入一行命令。不同的Shell有不同的缺省提示符:       BShell和KShell的缺省提示符为”$”;       CShell的缺省提示符为”%”;       但当以root用户登录时,系统提示符统一缺省为”#”。用户可以更改自己的缺省Shell和提

    2022年6月1日
    30
  • floor报错注入原理_sql报错注入

    floor报错注入原理_sql报错注入floor()报错注入准确地说应该是floor,count,groupby冲突报错是当这三个函数在特定情况一起使用产生的错误。首先看经典的floor注入语句:andselect1from(selectcount(*),concat(database(),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a)第一眼看…

    2022年9月27日
    0
  • Java集合篇:ConcurrentHashMap详解(JDK1.8)

    Java集合篇:ConcurrentHashMap详解(JDK1.8)

    2021年10月4日
    35
  • java和javase一样吗

    java和javase一样吗接口概述:接口是Java语言中的一种引用类型,是方法的”集合”,所以接口的内部主要就是定义方法,包含常量,抽象方法(JDK7及以前),额外增加默认方法和静态方法(JDK8),额外增加私有方法(jdk9)。接口的定义,它与定义类方式相似,但是使用interface关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。publicclass类名.java–>.classpublicinterface接口名.java–>.class接口的使

    2022年7月7日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号