28 | 理论二:为了保证重构不出错,有哪些非常能落地的技术手段?
该思维导图由 AI 生成,仅供参考
什么是单元测试?
- 深入了解
- 翻译
- 解释
- 总结
单元测试在软件开发中的重要性不言而喻。本文深入探讨了单元测试的概念、编写方法以及其对代码质量提升的重要作用。文章指出,单元测试不仅能有效发现代码中的bug,还能帮助发现代码设计上的问题,是对集成测试的有力补充。此外,单元测试的编写过程本身也是代码重构的过程,能够帮助发现设计和实现过程中的问题,促进代码质量的提升。作者还分享了关于如何编写单元测试的经验总结,包括写单元测试的耗时、代码质量要求、覆盖率、选择单元测试框架等方面的见解。文章强调了单元测试在保证重构不出错方面的重要性和价值,为读者提供了深入了解单元测试的重要性和实践方法的指导。文章还探讨了单元测试难以落地执行的原因,包括写单元测试的繁琐性、团队对单元测试认知的不足以及项目开发进度紧张等问题。最后,文章提出了两个课堂讨论话题,引导读者思考和分享在项目中实施单元测试的挑战以及设计完备的单元测试用例。整体而言,本文全面阐述了单元测试的重要性、编写方法以及实施难点,对于软件开发人员具有重要的指导意义。
《设计模式之美》,新⼈⾸单¥98
全部留言(132)
- 最新
- 精选
- potato00fa单元测试很重要,但是为什么大多人都会放弃?我个人觉得最主要的原因并不是代码量大,难以编写等,而是跑单元测试的次数少。很多单元测试都是为了写而写,写完一次可能都不去运行或者只偶尔运行一两次。如果是每次改完代码,都跑一遍单元测试,单元测试的效果会越来越显现。如果只是为了运行一两次或者干脆为了写而写,很容易就会放弃继续写单元测试。
作者回复: 可以集成到代码管理仓库git中,强制跑单元测试成功之后才能提交
2020-01-0747 - 沐之前公司要求新研的代码要达到百分之85的覆盖率,导致纯粹为了覆盖率堆砌了一堆单元用例。有没有单元测试写的比较好的开源框架推荐下?
作者回复: 哈哈,那就看我的项目啊:https://github.com/wangzheng0822 下面有个ratelimiter4j
2020-01-06443 - 刘大明说起来真的是难受。整个项目中就我一个人写单元测试。每次做的功能都有单元测试覆盖。而且项目中junit包都是我导入的。更加奇葩的是我的功能单元测试领导还不让我提交。说是你的测试代码为什么要提交,我瞬间无语了。
作者回复: 😂 可以考虑跳槽了
2020-01-061032 - 拙言打卡~ 这里问下王争老师,如果到了具体的业务代码,该怎么写单元测试呢,单元测试正确标准是什么呢,以sql查询到的结果吗?
作者回复: 涉及到数据库的项目,特别是重度依赖数据库的,确实比较难写单元测试。一种方式使用DBUNIT这样的测试框架来解耦合真正的数据库,另一种方式专门维护一个供单元测试用的数据库。
2020-01-06730 - yaomon程序员这一行业本该是智力密集型的,但现在很多公司把它搞成劳动密集型的,包括一些大厂,在开发过程中,既没有单元测试,也没有 Code Review 流程。即便有,做的也是差强人意。 ---------------------------------------------------------------------------------------- 差强人意:指尚能使人满意。根据文章上文,明显是不能使人满意的意思。处理为语病。
编辑回复: 差强人意是勉强使人满意,不是十分使人满意。所以这里没问题呢~
2020-01-061215 - Frank以前在开发中,没有写单元测试的意识。开发完功能后,直接去测试一个完整的流程。即前端发请求,服务端处理,看数据库数据。如果功能正确就过。这是从一个功能宏观去考虑测试。而单元测试是更细粒度的测试,它在保证各个“单元”都测试通过的情况下整个功能模块就测试通过了。这样的方式对于我们自己来说对代码可控粒度更细。更能比较清楚的理解某个“单元”在整个功能模块调用链路上的位置,承担什么职责,以及有什么行为。而不是一开始就站在模块宏观角度来思考。通过一个个单元测试的编写,将整个功能模块串联起来,最终达到整个功能模块的全局认知。 这也体现了任务分解的思想。通过单元测试,可以从另外一方面实现对已编写的代码的CodeReview,重新梳理流程。也为以后有重构需求打下基础。 目前参与的项目中有单元测试,但是不够完备。可能由于某些原因(开发人员意识问题,团队对单元测试的执行落地程度不够等)。在写单元测试的过程中,遇到单元测试依赖数据库查询问题,因为存在多套环境,如开发环境,仿真环境,线上环境。对于依赖数据查询的单元测试,只能自己造假数据来解决。不知道还有什么好的解决办法。
作者回复: 涉及到数据库的确实比较难写单元测试,而且如果重度依赖数据库,业务逻辑又不复杂,单元测试确实没有太大意义。这个时候,集成测试可能更有意义些。
2020-01-06611 - 逍遥思独立开发者,项目代码量 10W 行以内,在可以预见的未来不会超过 20W 行 以前试过 git 各种最佳实践,最后发现一个分支基本就够用了 所以还是忍不住想问问老师,如果项目真没那么大,是否需要单元测试?
作者回复: 需要的,这个跟项目大不大没太多关系的。单元测试还是为了保证代码少些低级bug
2020-01-06127 - 小晏子参与的项目都有单元测试,不过有些不够完备,缺少了一些corner case的覆盖,感觉后面要注意加上。遇到的一个问题是对于repository层(数据访问层)的测试,用了一个取巧的办法解决的,因为要依赖数据库,可是又没找到对应数据库的mock方式,所以使用了docker镜像的方式来做的,感觉也不错,避免了构造数据的麻烦。不知道还有没有更好的办法?
作者回复: DBunit了解一下~
2020-01-0686 - FIGNT争哥。马上过年了,过年期间不知道能否多发表几篇在过年期间学习?
编辑回复: 春节期间正常发布,惊喜待定😂
2020-01-075 - 番茄炒西红柿问一下单元测试中的依赖问题只能用mock来模拟吗?这样不会导致对下层方法依赖太强,而且用mock模拟感觉代码量也很多,心里感觉也不一定对。如果加入依赖(先倒入测试数据),那不就变成集成测试了吗?
作者回复: 解耦依赖目前来看就只能用mock的方式。这是跟集成测试最大的区别。
2020-01-0832