• 0
  • 0
分享

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

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

  没错,就是不想写!

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

  squaretest

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

1-1.png

  说实话,并没有什么鸟用。根本就没减少我多少的工作量,该覆盖不到的代码,还是覆盖不到。

  这个时候,我们需要更高级一点的工具。经过测试,现在瞄准了squaretest。

  在IDEA的插件安装界面中,找到squaretest并安装之,你就会拥有这个功能。

1-2.png

  重启IDEA之后,从你的屎山中,找到最臭的那一块,然后就可以在菜单中找到这个工具,生成代码。

  中间的话,可能会让你选择一下语言,选择一下模版之类的,这对于一个搞软件的来说并不是难事,所以这里也不再啰嗦。

1-3.png

  好家伙,足足给我生成了上万行的test代码。这时候,无论是交给QA看,还是交给分析工具去玩,都能闪瞎它们的狗眼。

  hehehehehehe....漂亮!

  报错不少,还得微调一下参数。但大多数代码已经生成好了,已经节约了很大的力气了。

1-4.png

  其他工具

  这貌似不是一个好的赛道。因为很多工具都不怎么维护了,或者不怎么好用。用爱发电越来越行不通了。

  比如JUnitGenerator2.0,连JUnit5都不支持;AgitarOne,虽然只有30天的试用期,但主页也和上古怪兽一样;Randoop的使用,根本就不是为人类设计的;Analytix被google收购后,几乎进入了坟墓。

  squaretest,可以说是非常好用了。

  你需要单元测试么?

  很多人没得选,因为这是硬指标。如果你的工作流程有问题,单元测试不但不能增彩,反而会成为累赘。

  大多数情况下,单元测试不会减少bug,它们会根据bug进行调整,以适应正常代码;另外,如果你的代码都是一些简单的CRUD,写单元测试看不到任何有益的地方。

  这个现状,还是要从根源上找原因。

  中国式需求,变化奇快,临时需求多,要求快速交付。这些功能,往往复杂性比较低,编写的代码并不会产生过多的bug;由于变化快,编写的单元测试也没有通用的可能性;一次性的代码,写完之后可能永远不再修改,被扔在一个遗忘的角落。

  要写单元测试,你要确保你的单元测试多年之后还可以用。而不是等到项目尾声,为了达到指标而集中补充单元测试。单元测试要想发挥它的价值,需要在一开始就创建相关的代码,扪心自问,很多团队是做不到这一点的。

  做不到,就不要装。

  单元测试并不简单

  有意思的是,即使环境达到了要求,所有的接口都提前设计了,且保持较少的变动,我们依然无法推行单元测试。

  单元测试从来不是因为写单元测试有多困难,而是大多数代码,是无法写出好的单元测试的。

  在TDD(Test-Driven Development,测试驱动开发)模式下,测试的动作比开发早,属于预先设计接口定义的范畴。如果你在后期对接口进行了较多的变更,这种方式同样会让开发人员变的痛苦不堪。

  单元测试需要配合极限编程,经常对代码进行重构。这是设计腐化之后的一种补救式措施。但很多情况下,大家都害怕、拒绝对旧代码进行修改。工期和稳定性是常见的借口,这些借口看起来比扩展性和可测试性看起来更正常一些,也更能说服高层进行决策。

  没有几个技术决策者,能够在销售、产品、老板的重重压力下保持初心,做这种长远性的规划。所以说单元测试肯定是有用的,但却缺乏实施的土壤。按时上线、提前上线、bug数量,这些常见的指标,只反映了结果,那些去改进这些结果的措施,短期效应不是很明显的话,很容易就胎死腹中。

  单元测试还阻碍开发人员重构的动力。因为重构意味着要动很多的测试代码,往往很多人偷偷一评估,就放弃了。

  坚持对的事情

  选择一个优秀的团队,是非常重要的。大家都很专业,不会亏待你所信仰的正确。专业的人才在二流子团队中,会像一个小丑一样无助,大多数习以为常的经验,几乎无法实施。

  让人欣慰的是,追求原则的团队还是有的,正确的方式可以避免很多曲折的路线,抛掉技术债所造成的负面影响。能够加入这些团队,是非常幸福的事情。

  作为程序员,应该时刻保持这种好的习惯,不要因为赶工,忽略了代码的重构和测试。这些是一个专业的技术人员应有的素质,而不是寄希望于公司的大环境中。这些好的习惯,就像人的气质一样让人着迷,最终会让你超脱于其他人而受益。

  作为技术管理者,你要正确评估自己的公司环境,是不是具有单元测试的生长土壤。即使你明白单元测试是有益的,你也不得不做一些取舍。尤其是你判断项目只不过是你的垫脚石,3年之后肯定不会在自己的手里,你更会任由它自我腐烂掉。如此情况,大家都心知肚明,没人会对你说三道四。

  作为非技术管理人员,当有人为你提出类似这种耗费工期的,长远有益的建议,不要着急否定。看一看其他优秀的企业,是不是也曾因这些短暂的原地踏步而受益过。无知并不可怕,可怕的是不相信专业。如果你肯定了,给予支持,而不要半途而废。有意思的是,半途而废最终并不会废止,它同样会蜕变为形式主义,将一件美好的事情硬生生变成指标。

  End

  单元测试代码是无聊的、枯燥的,尤其是为别人写的代码补充单元测试。通常情况下,如果不发生bug,没有人会闲的蛋疼去动那一堆堆的屎山,除非是不自量力的小牛犊。

  这个时候,一个得心应手的工具,自动帮你完成这些操蛋的工作,让你的单元测试代码拥有和屎山一样的生命周期,不得不说是一件快事。


作者:小姐姐养的狗    

来源:http://www.51testing.com/html/25/n-5002225.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   项目背景  https://passport.csdn.net/login CSDN登录页面  功能实现  ·自动运行用例  ·自动生成测试报告  ·自动断言与截图  ·自动将最新测试报告发送到指定邮箱  ·数据,页面元素分离  ·PageObject+Unittest+ddt数据驱动用例  ·执行日志、分布式执行  项目架构  浏览器driver定义from common.readFile import ReadFile   from common.logger import Logger   from seleniu...
            7 7 2282
            分享
          • 一、前言测试的面试相对于开发的面试来说,对于技术的询问其实相对来说较少的,主要针对以下几个方面。测试理论,接口,数据库,linux,自动化,性能、个人情况这几大块。二、常见问题1、软件测试理论基础①、什么是软件测试?在规定条件下对程序进行操作,发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。②、软件测试主要测试用例设计方法是什么?白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖黑盒测试:等价类、边界值、因果图、状态图法、错误猜测、测试大纲、随机测试、场景。③、测试计划、方案以及测试报告主要包括哪些方面?测试计划主要包括:测试范围(功能性测试;非功能性测试)测试通过/失败的标准(通...
            16 18 2602
            分享
          •   互联网上关于金山办公软件WPS被曝“套娃式”收费的讨论持续升温,引发众多用户关注。多名用户反映在购买WPS“超级会员”后,为了获取AI功能,不得不额外购买“超级会员Pro”,而如今再次收到弹窗提示,要求升级为“大会员”以继续使用AI功能。这一连串的付费升级现象被用户称为“套娃式”收费,引发用户对WPS会员制度透明度和合理性质疑。  针对用户的投诉,WPS热线客服给出了官方回应。客服表示,目前公司尚未出台会员体系整合政策,但未来可能会对现有的会员体系进行升级,或是推出涵盖更完善会员功能的新产品,以满足用户对不同功能需求的精细化服务。此回应虽未直接回应“套娃式”收费问题,但暗示了公司正考虑对现...
            0 0 601
            分享
          •   1月4日,恰好是乐视实行“四天半工作制”的第一天。  当天下午三点,燃次元到达北京乐视公司楼下时,迎面撞上不少面带笑容、结伴离开办公大楼的乐视员工,当燃次元进入乐视公司时,诺大的工区内,只剩下零星几个人。  乐视市场部负责人小夏告诉燃次元,在她宣布实行“四天半工作制”时,员工们是出乎她意料的“淡定”,毕竟在乐视,“从不996,下班即挂机,”小夏补充道,“员工下班从来不回我消息的,所以他们也没有很激动。”  2023年的第一个工作日,1月3日,乐视CEO张巍发布全员信,宣布了一个“高能”的消息,2023年1月1日起,公司将执行每周四天半工作制,每周三实行弹性的半天工作制,考勤时间调整为连续的...
            0 0 804
            分享
          •   一、判定表  1.使用场景:  当多个输入条件之间存在逻辑关系,需要组合测试时,使用判定表法进行分析  2.相关概念  (1)条件桩:输入条件,如工资薪制,错误程度  (2)条件项:输入条件的取值,如年薪制、月薪制  (3)动作桩:输出结果项,如扣款比例,扣款金额,实发工资  (4)动作项:输出每个项的具体值  3.使用步骤  (1)需求分析,得到条件桩和条件项,以及动作桩  (2)确定组合数量(条件项乘积)  (3)得到判定表  (4)导出测试用例,原则,一列是一条测试用例  案例1:  工资发放系统  条件桩:工资薪制  条件项:年薪制,月薪制,季薪制  案例2:  有一个处理单价为5...
            4 4 2767
            分享
      • 51testing软件测试圈微信