论单元测试之重要性

单元测试的重要性不言而喻,自我开发生涯以来,从不多注释过过场场,到很是重视。前端

单元测试为何会让人忽视呢?vue

一般状况像一些查询或者增删改之类,拿我来讲,即使报错我大概一扫,我就知道错误是什么了,该如何排查,由于就拿SpringMVC来讲或者MyBatis等,再不济就是Spring的依赖注入问题,拿MyBatis来讲,要么就是sql问题,要么就是参数问题,再不济就是与Spring动态扫描有关或者是mybatis中专门写sql的配置文件某个地方语法错误等,这些错误都是可预见的,说句很差听的话,再不济百度一搜,顿时分分秒就KO了。可是你们有没有想过这样一个问题?为何咱们总是在犯这些重复性错误呢?缘由是什么呢?sql

不重视测试。数据库

固然了就专业来讲,咱们是软件开发工程师,专一于开发,至于测试方面,咱们又不是专门的测试,管咱们什么事。编程

我只能说:此言差别。后端

为何呢?服务器

坦白的说,程序的Bug基本都是因为咱们这些开发人员致使的,好比说代码风格乱七八糟,写完代码看到功能实现了,就什么都无论了,也很少测测,以致于每次都是测试人员来测,发现谁的错误就通知谁,而谁谁就开始改了。mybatis

我认真想了下,其实不少错误是能够避免的。app

就拿我公司来讲,咱们没有测试没有前端没有运维,而我做为Java后台开发,同时兼任前端、测试、运维,记得在第一个项目初期时,为了加快项目进度,尽快让老板看到对应的效果,咱们快速开发,能粘贴复制尽可能不手写,遇到问题百度搜索,找到对应的解决方案,代码复制过来,看能不能跑起来,能跑起来,就无论了,功能实现就好,跑不起来,继续百度或者Google,固然通常状况百度比较多。框架

前期项目急,甚至表单校验懒得写,甚至有些代码注释都不写,命名的话想到规范就规范,想不起,凑合吧,对于那时的我来讲,这些都不是最重要的,最重要的是,每周完成工做任务,提交代码,功能实现。固然欲速则不达,再怎么快,总会由于这样的错,那样的错致使项目进度延迟。并且这些错误是能够彻底避免的。

好比咱们使用的框架是Spring+MyBatis+SpringMVC,采用的表现层技术是JSP,数据库为MySQL。

JSP对于广大的Java同行们,并不陌生。

话走的有点偏。本篇着重与凸显单元测试之重要性。

进入正题:

不管是先后端分离开发,仍是想我上述列出的先后端不是特别分离的jsp技术等,单元测试起到不可估量的做用。

我总结到,为何表现层方面就会出现这样的那样的错误,关键在于控制层代码有问题,也就是Controller层。

一般状况下,像我如今开发,一般Controller代码,我会经过单元测试测试好几遍,固然也作条件,这样的话,能够避免一些简单的错误,什么空指针,参数问题等等。并且对于表单提交方面的,例如注册、添加用户、批量增长或者修改等,都是能够经过单元测试测试是否正常。

记得某位朋友曾经说过,从单元测试到业务测试再到UI测试(WEB测试),越底层,花费的时间成本越小,很容易找到错误,越到高层越不易排错,固然了,排错的方式也很重要。

这里我想说的是,尽可能能在单元测试能够预见错误的前提下,尽可能排错错误的可能性,由于到WEB阶段是很是让人痛苦的。

越简单的事情每每都会让人忽略的,坦白的说吧,我发现一个很贴近现实的状况,就是咱们开发人员,就我我的而言,有的时候以为存在Bug,除非其余同事发现了,说了下,或者实际业务出问题,否则我不会改的,也懒得改。我想这是我半年前的心理。如今的我以写的代码让人尽量容易让同事看的懂,尽可能简洁,同时如今我对于我写的代码,我能够清楚的知道它是如何跑起来的,会出现哪些问题。固然了,对于一些简单的低级错误,我如今已经经过单元测试排除掉了。并且再加上严格的表单校验。统一规范的js书写和天天十到十五分钟早会的汇报和简单交流及其增强沟通的状况下,咱们的Bug愈来愈少了,代码总体的性能也愈来愈好,简洁优美,固然了,这还远远不够,相对于第一个项目而言,咱们的第二个项目一直到如今的第三个项目,愈来愈好了。但愿继续努力保持下去。

 

另外补充到:

对于先后端交互,不管是AJAX或者vue.js等等,SpringMVC的Controller代码,基本上都是能够经过单元测试获得结果的,单元测试过了,天然出错率会减小不少。

固然了,我说的单元测试,不是简单的运行就能够了,而是有条件的列出实际状况,这须要根据实际业务状况而定,固然了也不能老是在单元测试了,毕竟开发进度要保持增加。

 

总结:

上面的描述,也许很差理解,也许重点不突出。下面我要列出我认为重要的几点?

(1)小公司而言,后台兼任先后台开发,确保后台参数,能够在前台校验的,尽可能放在前台,这对于减轻服务器负载很是有帮助;

(2)controller代码中的各个@RequestMapping下的代码是能够经过单元测试避免不少错误的,例如空指针或者sql有误或者传参类型问题或者resultType或resultMap常见的问题等,这些是能够避免的;

(3)写代码,不管是js或者Java代码,必定要清楚的知道它是如何运行的,这里说的,并非要你知道很是清晰的每一步,由于那是计算机底层原理,这个底层原理我也不懂,正在学习中。我所说的知道它是如何运行的,是指,你能经过大脑想象,描述它是怎么走了,好比这个参数传到这个,可是参数值有误,会出现什么状况等等这样的状况,这样能够确保你的思惟是清楚,思惟的清楚,也表明代码逻辑的清楚。做为开发人员,连本身的代码都不知道怎么描述,说个因此然来,那么他的代码是很是糟糕的;

(4)代码,以追求简单易懂,清楚明了为主,让维护的人易维护,让几个月后的本身感谢本身。更让总体系统性能更好。其实,不少简单的事情堆积起来就是一件不平凡的事情。

 

以上就说这么多了,欢迎编程的友友们不吝赐教。