(1). 引言
看一些优秀的框架,会发现都有一个共同点,那就是它们基本上每一个类都伴随着一个相应的:测试类.
在这里,主要讨论什么是单元测试,为什么需要单元测试.结合自己的一些看法,应该要如何去实践单元测试(这也是为什么前些天会去看Junit和SpringTest的源码原因).
(2). 什么是单元测试?
单元测试属于小型测试,针对单个函数的测试,关注其内部逻辑输出的结果是否正确.如果将一个单元测试看成是一个单位,只需保证每一个单元测试都通过,则可以大大提高项目质量.单元测试可以保证能够代码覆盖率达到100%的测试.
对上面的话,我进行一个总结:
- 针对单个函数测试
- 关注内部逻辑输出的结果
- 提高项目质量
- 保证能够代码覆盖率达到100%
(3). 为什么单元测试没得到流行?
- 需求赶,没有足够的时间写单元测试.
- 功能需求太简单,没有必要写单元测试.
- 当需求变动的时候,又要修改单元测试,增加了开发时间.
- 测试的事情,应该交给测试人员来完成(质量与KPI没有挂钩).
(4). 单元测试的意义
- 特别是现在前后端分离之后,开发人员自测时,可能只是简单实现自测(无法让测试覆盖所有逻辑区域).
- 有利于新入职的程序员,对项目的快速上手,以及业务的理解.
- 保证你写的代码是你想要的结果.因为在编程中,经常会敲错代码导致结果并不是自己脑子里想的.如果不经过单元测试测试下运行结果,那么代码质量是肯定保证不了的.
- 单元测试是最少单位,一个系统需要靠一个一个最小的稳定的单位组成.所以保证一个最小单位的准确率是必须的.
- 单元测试应该是快速的,因此它不应该使用任何Web服务器.
(5). 如何实现单元测试
- 对于web容器的测试,使用webmock,而不是每次都启动容器,否则,时间都花在启动容器上面了.
- 对于有状态数据库使用:内嵌数据库.
- 对于依赖远程的服务,进行Mock.
(6). 总结
最后我说一下,单元测试对我的影响,当一个调用链比较深时,不太有利于我们对业务逻辑的理解.
而,从单元测试,可以让你只关注一个点,你要攻克的也只是这一个点,有利于增加你看源的成就感(满足感),而成就感才会给你带来快乐,才会驱使着你继续学习,否则.你很容易就会想放弃.