前
言
/ 2022.7.19
在今天, 前后端分离已经是开发的一个首选模式。而在此模式下,特别是两者交付时间差别很大的情况时,后端可能需要更加依赖于单元测试来保证代码的正确性。
01
什么是单元测试?
大雄有个朋友毕业进了外企,不仅学了很多新单词还掌握了许多新技能,下面是我和他最近的对话内容:
友人A
UT你知道什么意思吗?
啥?不造啊。
大雄
友人A
Unit Test啊,就是单元测试。
咋,你个浓眉大眼的后端现在也要开始写单元测试了吗?
大雄
友人A
是啊,咱已经是个大熟手了。
从朋友刚进公司不写单元测试被批,到现在已经非常熟练,期间艰苦自不必说。
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。通常而言,一个单元可能是单个程序、类、对象、方法等。
02
为什么要进行单元测试?
单元测试是整个软件开发过程中的一个重要环节,执行一个完备的单元测试方案能够:
- 提高整个开发过程的时间效率;
- 确保实际功能与设计说明的一致性;
- 使软件产品的质量得到最好的保障。
通俗一点的说法
当我们在一个系统里边修改了很多代码时,又不确定改动是否影响在核心逻辑时,那有没有一种东西能做到在编译时顺便自动跑一遍逻辑做回归呢?
当我们一不小心时就把代码写得一团乱,有没有一种东西能让我们在编码的时候就注重自己的代码设计呢?
当我们想测试部分代码逻辑是否正常的时候,我们可能会直接psvm来构造数据进而调试。那如果有一种东西能把我们psvm统一放到某个地方呢?
没错,能做到这些的就是我们今天要谈论的单元测试。
03
怎么写单元测试?
在和那位朋友商讨的过程中发现,单元测试早已不止停留在Junit上了,现在他们都会用Mockito这个框架去写单元测试。
至于具体如何使用,下面分享一下在这个过程中,大雄学习到的一些内容。
导入依赖
测试某个类中的某个方法是否成功执行
如果我们想要测试某个类中的某个方法是否可以执行,我们可以模拟一下这个类,让模拟的对象调用这个方法。
然后再去检验一下这个模拟对象是否成功调用到了这个方法,如果成功,则说明真实类中的这个方法是可以被成功执行的。如下图:
模拟某个类的方法,返回指定的值
我们在测试一个控制器的方法的时候,这个控制器中肯定是有一些方法是需要访问数据库的。
但是我们自己在进行单元测试的时候,其实不必访问数据库,可以使用Mock来模拟出访问数据库的方法返回的值,如下图:
Mock模拟某个方法调用后会抛出指定的异常
什么是打桩?在什么情况下使用?
打桩其实就是在真实代码的地方用一个模拟方法代替,然后真实方法执行到这个地方的时候,它的返回值是我们模拟的返回值。
when().thenReturn(),用这句代码我们可以自己给某个方法设定返回值,这就叫做打桩。
在什么时候需要打桩呢?如果我们想要自测的方法有返回值,那么我们就需要打桩。
04
总结
以上的整理还远远不够,大家都能明白,只有在写的过程中才能发现问题,整理问题,最后解决问题。
大多数后端的朋友都不爱写单元测试,很多时候写单测就是为了通过编译,为了业务的覆盖率,能绕开就绕开了。
但为了后端质量的保证,还是开始学习吧~
点击蓝字
阅读原文