后端也要开始搞测试了?

2022-07-19 20:42:10 浏览数 (1)

/ 2022.7.19

在今天, 前后端分离已经是开发的一个首选模式。而在此模式下,特别是两者交付时间差别很大的情况时,后端可能需要更加依赖于单元测试来保证代码的正确性。

01

什么是单元测试?

大雄有个朋友毕业进了外企,不仅学了很多新单词还掌握了许多新技能,下面是我和他最近的对话内容:

友人A

UT你知道什么意思吗?

啥?不造啊。

大雄

友人A

Unit Test啊,就是单元测试。

咋,你个浓眉大眼的后端现在也要开始写单元测试了吗?

大雄

友人A

是啊,咱已经是个大熟手了。

从朋友刚进公司不写单元测试被批,到现在已经非常熟练,期间艰苦自不必说。

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。通常而言,一个单元可能是单个程序、类、对象、方法等。

02

为什么要进行单元测试?

单元测试是整个软件开发过程中的一个重要环节,执行一个完备的单元测试方案能够:

  • 提高整个开发过程的时间效率;
  • 确保实际功能与设计说明的一致性;
  • 使软件产品的质量得到最好的保障。

通俗一点的说法

当我们在一个系统里边修改了很多代码时,又不确定改动是否影响在核心逻辑时,那有没有一种东西能做到在编译时顺便自动跑一遍逻辑做回归呢?

当我们一不小心时就把代码写得一团乱,有没有一种东西能让我们在编码的时候就注重自己的代码设计呢?

当我们想测试部分代码逻辑是否正常的时候,我们可能会直接psvm来构造数据进而调试。那如果有一种东西能把我们psvm统一放到某个地方呢?

没错,能做到这些的就是我们今天要谈论的单元测试

03

怎么写单元测试?

在和那位朋友商讨的过程中发现,单元测试早已不止停留在Junit上了,现在他们都会用Mockito这个框架去写单元测试。

至于具体如何使用,下面分享一下在这个过程中,大雄学习到的一些内容。

导入依赖

测试某个类中的某个方法是否成功执行

如果我们想要测试某个类中的某个方法是否可以执行,我们可以模拟一下这个类,让模拟的对象调用这个方法

然后再去检验一下这个模拟对象是否成功调用到了这个方法,如果成功,则说明真实类中的这个方法是可以被成功执行的。如下图:

模拟某个类的方法,返回指定的值

我们在测试一个控制器的方法的时候,这个控制器中肯定是有一些方法是需要访问数据库的。

但是我们自己在进行单元测试的时候,其实不必访问数据库,可以使用Mock来模拟出访问数据库的方法返回的值,如下图:

Mock模拟某个方法调用后会抛出指定的异常

什么是打桩?在什么情况下使用?

打桩其实就是在真实代码的地方用一个模拟方法代替,然后真实方法执行到这个地方的时候,它的返回值是我们模拟的返回值。

when().thenReturn(),用这句代码我们可以自己给某个方法设定返回值,这就叫做打桩。

在什么时候需要打桩呢?如果我们想要自测的方法有返回值,那么我们就需要打桩。

04

总结

以上的整理还远远不够,大家都能明白,只有在写的过程中才能发现问题,整理问题,最后解决问题。

大多数后端的朋友都不爱写单元测试,很多时候写单测就是为了通过编译,为了业务的覆盖率,能绕开就绕开了。

但为了后端质量的保证,还是开始学习吧~

点击蓝字

阅读原文

0 人点赞