真不是吹,这款能减少 BUG 的 IDEA 插件你可能没用过!
发布网友
发布时间:2024-10-09 02:16
我来回答
共1个回答
热心网友
时间:2024-10-11 12:32
前言
单元测试,一方面是软件开发的基石,另一方面却是令人头疼的负担。尤其当团队面临这项任务时,几乎很难轻松应对。
面对自己编写的代码,编写单元测试或许还能接受。然而,对于绝大多数人来说,接手别人留下的“烂摊子”,编写单元测试就显得格外不情愿。
没错,就是不想写!
为了满足所谓的指标,我们不得不给那些即将发臭的代码注入一股生命力:那就是自动化。假如大部分工作都能交给机器完成,相信很多人都会乐在其中。
squaretest
市面上有许多这样的工具,比如IDEA自带的,但它们只能生成一些表面功夫的东西,无法真正减少我们的工作量。
这时,我们需要更高级的工具。经过测试,squaretest在IDEA插件中脱颖而出。安装并重启IDEA后,你就能使用这个功能。
只需找到最需要改进的代码块,在菜单中找到squaretest工具,生成代码即可。选择语言和模板等操作对于软件开发者来说并不困难,此处不再赘述。
结果令人惊喜,squaretest为我生成了上万行的test代码。无论是交给QA团队查看,还是交给分析工具进行分析,都能让人眼前一亮。
hehehehehehe....漂亮!虽然仍需微调参数,但大部分代码已经生成,大大节省了我们的力气。
其他工具
这个赛道似乎并不受欢迎。许多工具都缺乏维护,或者实用性不高。JUnitGenerator2.0不支持JUnit5;AgitarOne只有30天试用期;Randoop的设计并不适合人类使用;Analytix被谷歌收购后,几乎销声匿迹。squaretest可以说是非常实用。
你需要单元测试吗?
很多人没有选择,因为这是硬性指标。如果工作流程存在问题,单元测试反而会成为累赘。在大多数情况下,单元测试并不能减少bug,而是根据bug进行调整,以适应正常代码。此外,如果你的代码都是一些简单的CRUD,编写单元测试也看不到任何益处。要解决这个问题,我们需要从根源上找原因。中国式需求变化快,临时需求多,要求快速交付。这些功能往往复杂性较低,编写的代码并不会产生过多的bug。由于变化快,编写的单元测试也没有通用性。一次性的代码,写完之后可能永远不再修改,被扔在一个遗忘的角落。要编写单元测试,你需要确保多年后还能使用。而不是等到项目尾声,为了达到指标而集中补充单元测试。单元测试要想发挥其价值,需要在一开始就创建相关的代码,许多团队都做不到这一点。做不到,就不要假装。
单元测试并不简单
即使环境达到要求,所有的接口都提前设计,且保持较少的变动,我们依然无法推行单元测试。单元测试从来不是因为编写单元测试有多困难,而是大多数代码都无法写出好的单元测试。在TDD(测试驱动开发)模式下,测试的动作比开发早,属于预先设计接口定义的范畴。如果你在后期对接口进行了较多的变更,这种方式同样会让开发人员感到痛苦。单元测试需要配合极限编程,经常对代码进行重构。这是设计腐化之后的一种补救式措施。但很多情况下,大家都害怕、拒绝修改旧代码。工期和稳定性是常见的借口,这些借口看起来比扩展性和可测试性更正常一些,也更能说服高层进行决策。没有几个技术决策者能够在销售、产品、老板的重重压力下保持初心,做这种长远性的规划。所以说单元测试肯定是有用的,但却缺乏实施的土壤。按时上线、提前上线、bug数量,这些常见的指标,只反映了结果,那些去改进这些结果的措施,短期效应不是很明显的话,很容易就胎死腹中。单元测试还阻碍开发人员重构的动力。因为重构意味着要动很多的测试代码,往往很多人偷偷一评估,就放弃了。
坚持对的事情
选择一个优秀的团队至关重要。大家都很专业,不会亏待你所信仰的正确。专业的人才在二流子团队中,会像一个小丑一样无助,大多数习以为常的经验,几乎无法实施。让人欣慰的是,追求原则的团队还是有的,正确的方式可以避免很多曲折的路线,抛掉技术债所造成的负面影响。能够加入这些团队,是非常幸福的事情。作为程序员,应该时刻保持这种好的习惯,不要因为赶工,忽略了代码的重构和测试。这些是一个专业技术人员应有的素质,而不是寄希望于公司的大环境中。这些好的习惯,就像人的气质一样让人着迷,最终会让你超脱于其他人而受益。作为技术管理者,你要正确评估自己的公司环境,是不是具有单元测试的生长土壤。即使你明白单元测试是有益的,你也不得不做一些取舍。尤其是你判断项目只不过是你的垫脚石,3年之后肯定不会在自己的手里,你更会任由它自我腐烂掉。如此情况,大家都心知肚明,没人会对你说三道四。作为非技术管理人员,当有人为你提出类似这种耗费工期的、长远有益的建议,不要着急否定。看一看其他优秀的企业,是不是也曾因这些短暂的原地踏步而受益过。无知并不可怕,可怕的是不相信专业。如果你肯定了,给予支持,而不要半途而废。有意思的是,半途而废最终并不会废止,它同样会蜕变为形式主义,将一件美好的事情硬生生变成指标。
End
单元测试代码是无聊的、枯燥的,尤其是为别人写的代码补充单元测试。通常情况下,如果不发生bug,没有人会闲的蛋疼去动那一堆堆的“烂摊子”,除非是不自量力的小牛犊。这个时候,一个得心应手的工具,自动帮你完成这些“烂摊子”,让你的单元测试代码拥有和“烂摊子”一样的生命周期,不得不说是一件快事。