前言
之前在开发进行到写单元测试阶段的时候,发现要测试的方法里面是包含依赖的:外部接口RPC调用、DB调用。在某些情况下,部分依赖不稳定或者无法在测试环境调用时,会导致用例偶尔执行失败。
另外一点,很多用例都是在测试用例的开头写了`@SpringRunTest`的注解,导致跑用例的时候会启动整个Spring容器,这样一来,运行测试用例就非常慢了。当在一些比较大的项目运行用例时,甚至达到了每次启动容器需要5-6分钟的时长,渐渐就有点受不了这种操作,每改一行代码心里都焦急,因为如果错了的话又要再等5-6分钟才能看到效果了。后来请教同事和上网搜索,找到了一种比较快且安全的方案,使用Mock框架--Mockito,学习并实践了一段时间,总结一下使用方法。
Mockito
Mockito是当前最流行的单元测试Mock框架。
什么是Mock
Mock的字面意思就是模仿,虚拟,在单元测试中,使用Mock可以虚拟出一个外部依赖对象。
对于在单元测试中一些不容易构造或者不容易获取的对象(如外部服务),用一个Mock对象来创建,可以降低测试的复杂度,只关心当前单元测试的方法。
为什么用Mock
单元测试的目的就是为了验证一个代码单元的正确性,真正要验证的只是某个输入对应的输出的正确与否。如果把外部依赖服务引入进来,就会增加原来单元的复杂度,且在该单元中隐形地掺杂了其他功能的内容。
使用Mock对象进行单元测试,开发可以只关心要测试单元的代码。
使用示例
先看看代码示例,假设有以下的场景: