首页 > 其他分享 >真不是吹,这款能减少 BUG 的 IDEA 插件你可能没用过!

真不是吹,这款能减少 BUG 的 IDEA 插件你可能没用过!

时间:2023-08-08 10:55:17浏览次数:42  
标签:很多 插件 代码 单元测试 IDEA BUG squaretest bug

 

前言

 

单元测试是一个伟大的发明,同时也是一个操蛋的发明。只要团队碰它,几乎很难全身而退。

如果是我们自己写的代码,那么,写写单元测试也无伤大雅。但我们绝大多数人,都是跟在别人后面打扫狗屎,或者是留给别人一堆狗屎。这时候,单元测试写起来,就有一种不情不愿的味道。

没错,就是不想写!

为了应付所谓的指标,我们要给那些遗留代码,将要发臭的代码上一剂良药:那就是自动化。假如这些糟心的代码,大部分交给机器去写,我想很多人是非常乐意的。

squaretest

有很多这样的工具,比如IDEA自带的。但是它只能生成一些表面功夫的东西,也就是生成一个骨架而已。

说实话,并没有什么鸟用。根本就没减少我多少的工作量,该覆盖不到的代码,还是覆盖不到。
这个时候,我们需要更高级一点的工具。经过测试,现在瞄准了squaretest。在IDEA的插件安装界面中,找到squaretest并安装之,你就会拥有这个功能。

重启IDEA之后,从你的屎山中,找到最臭的那一块,然后就可以在菜单中找到这个工具,生成代码。
中间的话,可能会让你选择一下语言,选择一下模版之类的,这对于一个搞软件的来说并不是难事,所以这里也不再啰嗦。

好家伙,足足给我生成了上万行的test代码。这时候,无论是交给QA看,还是交给分析工具去玩,都能闪瞎它们的狗眼。
hehehehehehe....漂亮!报错不少,还得微调一下参数。但大多数代码已经生成好了,已经节约了很大的力气了。

其他工具

这貌似不是一个好的赛道。因为很多工具都不怎么维护了,或者不怎么好用。用爱发电越来越行不通了。比如JUnitGenerator2.0,连JUnit5都不支持;AgitarOne,虽然只有30天的试用期,但主页也和上古怪兽一样;Randoop的使用,根本就不是为人类设计的;Analytix被google收购后,几乎进入了坟墓。squaretest,可以说是非常好用了。

你需要单元测试么?

很多人没得选,因为这是硬指标。如果你的工作流程有问题,单元测试不但不能增彩,反而会成为累赘。大多数情况下,单元测试不会减少bug,它们会根据bug进行调整,以适应正常代码;另外,如果你的代码都是一些简单的CRUD,写单元测试看不到任何有益的地方。这个现状,还是要从根源上找原因。中国式需求,变化奇快,临时需求多,要求快速交付。这些功能,往往复杂性比较低,编写的代码并不会产生过多的bug;由于变化快,编写的单元测试也没有通用的可能性;一次性的代码,写完之后可能永远不再修改,被扔在一个遗忘的角落。要写单元测试,你要确保你的单元测试多年之后还可以用。而不是等到项目尾声,为了达到指标而集中补充单元测试。单元测试要想发挥它的价值,需要在一开始就创建相关的代码,扪心自问,很多团队是做不到这一点的。做不到,就不要装。

单元测试并不简单

有意思的是,即使环境达到了要求,所有的接口都提前设计了,且保持较少的变动,我们依然无法推行单元测试。单元测试从来不是因为写单元测试有多困难,而是大多数代码,是无法写出好的单元测试的。在TDD(Test-Driven Development,测试驱动开发)模式下,测试的动作比开发早,属于预先设计接口定义的范畴。如果你在后期对接口进行了较多的变更,这种方式同样会让开发人员变的痛苦不堪。单元测试需要配合极限编程,经常对代码进行重构。这是设计腐化之后的一种补救式措施。但很多情况下,大家都害怕、拒绝对旧代码进行修改。工期和稳定性是常见的借口,这些借口看起来比扩展性和可测试性看起来更正常一些,也更能说服高层进行决策。没有几个技术决策者,能够在销售、产品、老板的重重压力下保持初心,做这种长远性的规划。所以说单元测试肯定是有用的,但却缺乏实施的土壤。按时上线、提前上线、bug数量,这些常见的指标,只反映了结果,那些去改进这些结果的措施,短期效应不是很明显的话,很容易就胎死腹中。单元测试还阻碍开发人员重构的动力。因为重构意味着要动很多的测试代码,往往很多人偷偷一评估,就放弃了。

坚持对的事情

选择一个优秀的团队,是非常重要的。大家都很专业,不会亏待你所信仰的正确。专业的人才在二流子团队中,会像一个小丑一样无助,大多数习以为常的经验,几乎无法实施。让人欣慰的是,追求原则的团队还是有的,正确的方式可以避免很多曲折的路线,抛掉技术债所造成的负面影响。能够加入这些团队,是非常幸福的事情。作为程序员,应该时刻保持这种好的习惯,不要因为赶工,忽略了代码的重构和测试。这些是一个专业的技术人员应有的素质,而不是寄希望于公司的大环境中。这些好的习惯,就像人的气质一样让人着迷,最终会让你超脱于其他人而受益。作为技术管理者,你要正确评估自己的公司环境,是不是具有单元测试的生长土壤。即使你明白单元测试是有益的,你也不得不做一些取舍。尤其是你判断项目只不过是你的垫脚石,3年之后肯定不会在自己的手里,你更会任由它自我腐烂掉。如此情况,大家都心知肚明,没人会对你说三道四。作为非技术管理人员,当有人为你提出类似这种耗费工期的,长远有益的建议,不要着急否定。看一看其他优秀的企业,是不是也曾因这些短暂的原地踏步而受益过。无知并不可怕,可怕的是不相信专业。如果你肯定了,给予支持,而不要半途而废。有意思的是,半途而废最终并不会废止,它同样会蜕变为形式主义,将一件美好的事情硬生生变成指标。

End

单元测试代码是无聊的、枯燥的,尤其是为别人写的代码补充单元测试。通常情况下,如果不发生bug,没有人会闲的蛋疼去动那一堆堆的屎山,除非是不自量力的小牛犊。这个时候,一个得心应手的工具,自动帮你完成这些操蛋的工作,让你的单元测试代码拥有和屎山一样的生命周期,不得不说是一件快事。

 

标签:很多,插件,代码,单元测试,IDEA,BUG,squaretest,bug
From: https://www.cnblogs.com/hezemin/p/17613591.html

相关文章

  • kettle之添加geometry插件支持并使用
    参考:https://blog.csdn.net/aganliang/article/details/104949538为了能够处理geometry类型的数据,PDI需要安装pentaho-gis-plugins该插件下载地址:https://github.com/atolcd/pentaho-gis-plugins/releases根据自己的kettle版本,下载所需的插件即可,我的是9的,所以下载的是1.4 ......
  • 同事写了个惊天 bug,还不容易被发现。。
    作者:树洞君链接:https://juejin.cn/post/7064376361334358046事故描述从6点32分开始少量用户访问app时会出现首页访问异常,到7点20分首页服务大规模不可用,7点36分问题解决。整体经过6:58发现报警,同时发现群里反馈首页出现网络繁忙,考虑到前几日晚上门店列表服务上线发布过,所以......
  • Ubuntu装进U盘(Ventoy 插件)避坑指南
    注意:本教程不是用Ventoy制作Ubuntu的U盘启动盘!!而是用Ventoy插件,把Ubuntu装进U盘里实现即插即用Ubuntu。本教程参看原教程:利用ventoy,将ubuntu安装到U盘中,实现即插即用。本教程尊重原创,笔者在参考原教程操作时所遇大小坑以此记录,算是对原教程的补充。避坑避坑0:本地硬......
  • 一些不错的VSCode设置和插件
    设置同步设置我们做的各项设置,不希望再到其他机器的时候还得再重新配置一次。VSCode中我们可以登陆微软账号或者GitHub账号,登陆后我们可以开启同步设置。开启设置同步,根据提示登陆即可。允许侧边栏水平滑动在目录层次较深或者文件名比较长时,侧边栏就无法完整显示文件名了。默......
  • 并发中atomic BUG分享
    在使用Java做性能测试的过程中,遇到过很多自己抗自己的坎儿。在经历过风风雨雨之后,自认为已经是个并发编程的老司机,没想到前两天又丢进了同一个坑中。保持操作的原子性!!!保持操作的原子性!!!保持操作的原子性!!!重要的事情写三遍。事情是这样,要写一个脚本,需求是对所有的用户进行初始化(......
  • VPP 插件分析与开发
    [email protected],2023DescriptionVPP自定义插件开发demo在之前的博客:自定义插件中,我们给出了FD.ioVPP的sample插件构建方式,但是并没有去真正开发一个插件。这篇博客给出一个打印数据包IP头部的完整示例。1.ping插件分析插件的例......
  • idea2022.3.1 java文件显示J
     解决办法:1、File>projectstructure>Modules 把Java标成sources,相应资源文件标成resource。2、刷新一下maven,重启一下IDEA就可以了 ......
  • 映像深刻的bug
    示例如下: 我之前测电商业务时,我们的系统在展示商品的时候每点击一个商品就会跳转到相应的详情页,url格式大概=~/productid.html,如果知道productid的话可以直接修改url跳转到其商品的详情页。类似的情况是,用户下单的时候会生成一个ordid,生成的订单详情页的url=~/ordidhtml,于是我......
  • vue图片压缩插件
    图片压缩插件1.安装插件npmijs-image-compressor2.引入importImageCompressorfrom'js-image-compressor'3.使用compressionImage(file){returnnewPromise((resolve,reject)=>{//eslint-disable-next-lineno-newnewImageCom......
  • Springboot-Mybatis(idea)-自学笔记
    Spring-boot-Mybaties快速入门使用Mybatis查询所有用户数据准备工作(创建springboot工程,数据库表格user,实体类User)引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)编写SQL语句(注解/XML)单元测试packagecom.example;importcom.example.mapper.UserMapper;impo......